opendir — код изменения размера изображения php и высокая загрузка процессора

У меня есть следующий код php, который изменяет размеры изображений в папке cbimages и создает миниатюры изображений в другой папке cbimages / thumbs /

<?php
//Maximize script execution time
ini_set('max_execution_time', 0);

//Initial settings, Just specify Source and Destination Image folder.
$ImagesDirectory    = '/var/www/example.com/public_html/cbimages/'; //Source Image Directory End with Slash
$DestImagesDirectory    = '/var/www/example.com/public_html/cbimages/thumbs/'; //Destination Image Directory End with Slash
$NewImageWidth      = 150; //New Width of Image
$NewImageHeight     = 150; // New Height of Image
$Quality        = 80; //Image Quality//Open Source Image directory, loop through each Image and resize it.
if($dir = opendir($ImagesDirectory)){
while(($file = readdir($dir))!== false){

$imagePath = $ImagesDirectory.$file;
$destPath = $DestImagesDirectory.$file;
$checkValidImage = @getimagesize($imagePath);

if(file_exists($imagePath) && $checkValidImage) //Continue only if 2 given parameters are true
{
//Image looks valid, resize.
if(resizeImage($imagePath,$destPath,$NewImageWidth,$NewImageHeight,$Quality))
{
echo $file.' - Resize Success!<br />';
/*
Now Image is resized, may be save information in database?
*/
}else{
echo $file.' - Resize Failed!<br />';
}
}
}
closedir($dir);
}

//Function that resizes image.
function resizeImage($SrcImage,$DestImage, $MaxWidth,$MaxHeight,$Quality)
{
list($iWidth,$iHeight,$type)    = getimagesize($SrcImage);
$ImageScale             = min($MaxWidth/$iWidth, $MaxHeight/$iHeight);
$NewWidth               = ceil($ImageScale*$iWidth);
$NewHeight              = ceil($ImageScale*$iHeight);
$NewCanves              = imagecreatetruecolor($NewWidth, $NewHeight);

switch(strtolower(image_type_to_mime_type($type)))
{
case 'image/jpeg':
case 'image/png':
case 'image/gif':
$NewImage = imagecreatefromjpeg($SrcImage);
break;
default:
return false;
}

// Resize Image
if(imagecopyresampled($NewCanves, $NewImage,0, 0, 0, 0, $NewWidth, $NewHeight, $iWidth, $iHeight))
{
// copy file
if(imagejpeg($NewCanves,$DestImage,$Quality))
{
imagedestroy($NewCanves);
return true;
}
}
}
?>

Скрипт работает нормально в моей локальной среде разработки с Ubuntu 14.04 и работает быстро. На моем сервере Ubuntu 14.04 использование чашки увеличивается до 100% и занимает время для завершения.

Это занимает слишком много времени, чтобы запустить скрипт и Загрузка процессора увеличивается до 100%. Каждый раз, когда я запускаю этот скрипт, он начинает изменять размеры всех изображений … даже те, которые были изменены.

Как я могу оптимизировать скрипт?

Требуется помощь. Заранее спасибо.

-1

Решение

Посмотрите, если этот класс имеет какое-либо значение:

class thumb{

var $image;
var $type;
var $width;
var $height;

//read image method
function loadImage($name){

//get image dimensions
$info = getimagesize($name);

if($info){

$this->width = $info[0];
$this->height = $info[1];
$this->type = $info[2];

//create new image
switch($this->type){
case IMAGETYPE_BMP:
$this->image = imagecreatefromwbmp($name);
break;
case IMAGETYPE_JPEG:
$this->image = imagecreatefromjpeg($name);
break;
case IMAGETYPE_GIF:
$this->image = imagecreatefromgif($name);
break;
case IMAGETYPE_PNG:
$this->image = imagecreatefrompng($name);
break;
default: $this->image = false;
}

return $this->image;

}
else{return false;}

}

//store the image
function saveImage($name, $quality = 100){

switch($this->type){
case IMAGETYPE_BMP:
$go = imagewbmp($this->image, $name);
break;
case IMAGETYPE_JPEG:
$go = imagejpeg($this->image, $name, $quality);
break;
case IMAGETYPE_GIF:
$go = imagegif($this->image, $name);
break;
case IMAGETYPE_PNG:
$pngquality = floor(($quality - 10) / 10);
$go = imagepng($this->image, $name, $pngquality);
break;
default: $go = false;
}

return $go;

}

//resize image dimensions proportionally
function resizeImage($x, $y){

//get resizing properties
$wd = $x;
$hg = $y;

if($this->width >= $this->height){$hg = round($this->height / ($this->width / $x));}
else{$wd = round($this->width / ($this->height / $y));}

if($wd < $x){
$wd = $x;
$hg = round($this->height / ($this->width / $x));
}
else{
if($hg < $y){
$hg = $y;
$wd = round($this->width / ($this->height / $y));
}
}

//create image based on properties
$image = imagecreatetruecolor($wd, $hg);

//make image copy based on properties
$go = imagecopyresampled($image, $this->image, 0, 0, 0, 0, $wd, $hg, $this->width, $this->height);

//refresh image with new dimensions on success
if($go){
$this->width = imagesx($image);
$this->height = imagesy($image);
$this->image = $image;
}

return $go;

}

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]