php gd — PHP Создание 3 миниатюрных изображений разных размеров из загруженного изображения

Я пытаюсь создать 3 миниатюрных изображения разных размеров из одного загруженного изображения. В настоящее время я использую приведенный ниже код для создания 1 миниатюры шириной 150 пикселей.

Есть ли простой способ сделать это вместо того, чтобы повторять один и тот же код трижды для каждого нужного мне эскиза?

Я пытаюсь создать эскизы в 3 размерах: 750 пикселей в ширину, 150 пикселей в ширину и 70 пикселей в ширину.

Вот код, который я использую для создания эскиза шириной 150 пикселей.

Есть ли в PHP функция, позволяющая делать такие вещи, или повторяется код, приведенный ниже для каждого размера, мне нужен мой единственный вариант.

if(file_exists($thisImage)) {

$imageName = $thisImage;
$imageInfo = finfo_open(FILEINFO_MIME_TYPE);
$imageType = finfo_file($imageInfo, $imageName);
finfo_close($imageInfo);if($imageType == 'image/pjeg' || $imageType == 'image/jpeg' || $imageType == 'image/jpg') {
$imgSource = imagecreatefromjpeg($thisImage);
} elseif ($imageType == 'image/png') {
$imgSource = imagecreatefrompng($thisImage);
} elseif ($imageType == 'image/gif') {
$imgSource = imagecreatefromgif($thisImage);
} else {
$imgSource = false;
return false;
}

if($imgSource) {
list($width,$height)=getimagesize($thisImage);

$thumbImageWidth = 150;
$thumbImageHeight = ($height/$width)*$thumbImageWidth;
$tempThumbImage = imagecreatetruecolor($thumbImageWidth,$thumbImageHeight);

if(!imagecopyresampled($tempThumbImage,$imgSource,0,0,0,0,$thumbImageWidth,$thumbImageHeight,$width,$height)) return false;

$thumbImageTarget = $thisPath.$thisName;

if(!imagejpeg($tempThumbImage,$thumbImageTarget,100)) return false;

if(!imagedestroy($imgSource)) return false;

if(!imagedestroy($tempThumbImage)) return false;

if(!unlink($thisImage)) return false;

return true;
}
} else {
return false;
}

0

Решение

PHP не имеет этой функции. Но вы можете создать функцию с именем resize($width, $heigh) и поместите свою часть изменения размера в.

0

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

Ответ Заирольфа в основном правильный, хотя и не исчерпывающий.

Вам нужно создать пользовательская функция.

resize($thisImage, 70, $thisPath.$thisName."-thumb1.jpg");
resize($thisImage, 150, $thisPath.$thisName."-thumb2.jpg");
resize($thisImage, 750, $thisPath.$thisName."-thumb3.jpg");

function resize($imageName, $thumbImageWidth, $thumbImageTarget)
{
if(file_exists($imageName)) {

$imageInfo = finfo_open(FILEINFO_MIME_TYPE);
$imageType = finfo_file($imageInfo, $imageName);
finfo_close($imageInfo);if($imageType == 'image/pjeg' || $imageType == 'image/jpeg' || $imageType == 'image/jpg') {
$imgSource = imagecreatefromjpeg($imageName);
} elseif ($imageType == 'image/png') {
$imgSource = imagecreatefrompng($imageName);
} elseif ($imageType == 'image/gif') {
$imgSource = imagecreatefromgif($imageName);
} else {
$imgSource = false;
return false;
}

if($imgSource) {
list($width,$height)=getimagesize($imageName);

$thumbImageHeight = ($height/$width)*$thumbImageWidth;
$tempThumbImage = imagecreatetruecolor($thumbImageWidth,$thumbImageHeight);

if(!imagecopyresampled($tempThumbImage,$imgSource,0,0,0,0,$thumbImageWidth,$thumbImageHeight,$width,$height)) return false;if(!imagejpeg($tempThumbImage,$thumbImageTarget,100)) return false;

if(!imagedestroy($imgSource)) return false;

if(!imagedestroy($tempThumbImage)) return false;

if(!unlink($imageName)) return false;

return true;
}
} else {
return false;
}
}
0

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