GD — Создание эскизов с помощью PHP для различных форматов

Так что я сделал этот скрипт, который создает эскизы на лету с php, и он работает нормально, но эти файлы, для которых я создаю эскизы, загружаются от пользователя. Который у меня достаточно проверки, чтобы знать, какой тип изображения он загружается. Разрешено один раз (JPG PNG GIFНет, я создал этот скрипт выше.

if (pathinfo($fileName,PATHINFO_EXTENSION) == 'png'){
$img = imagecreatefrompng($basePath.'/'.$fileName);
$width = imagesx($img);
$height = imagesx($img);

//Calculateing tumbnails size
$newWidth = 100;
$newHeight = floor($height*(100/$width));

//Create a new tempoary image
$tmpImage = imagecreatetruecolor($newWidth,$newHeight);

imagecopyresized($tmpImage,$img,0,0,0,0,$newWidth,$newHeight,$width,$height);

imagepng($tmpImage,$pathToTumb.'/'.$fileName);
}
if (pathinfo($fileName,PATHINFO_EXTENSION) == 'jpg'){
$img = imagecreatefromjpeg($basePath.'/'.$fileName);
$width = imagesx($img);
$height = imagesx($img);

//Calculateing tumbnails size
$newWidth = 100;
$newHeight = floor($height*(100/$width));

//Create a new tempoary image
$tmpImage = imagecreatetruecolor($newWidth,$newHeight);

imagecopyresized($tmpImage,$img,0,0,0,0,$newWidth,$newHeight,$width,$height);

imagejpeg($tmpImage,$pathToTumb.'/'.$fileName);
}
if(pathinfo($fileName,PATHINFO_EXTENSION) == 'gif'){
$img = imagecreatefromgif($basePath.'/'.$fileName);
$width = imagesx($img);
$height = imagesx($img);

//Calculateing tumbnails size
$newWidth = 100;
$newHeight = floor($height*(100/$width));

//Create a new tempoary image
$tmpImage = imagecreatetruecolor($newWidth,$newHeight);

imagecopyresized($tmpImage,$img,0,0,0,0,$newWidth,$newHeight,$width,$height);

imagegif($tmpImage,$pathToTumb.'/'.$fileName);
}

Я считаю, что очень повторяется, есть ли другой способ сделать это для разных форматов?

Также я хотел бы, чтобы, если это вообще возможно сделать, когда изображение не имеет расширения, например, если имя файла просто test вместо test.jpg

-1

Решение

Если вы обнаружите, что копируете и вставляете код, вы должны превратить этот код в функцию. Ваш код может быть изменен, как показано ниже:

switch (pathinfo($fileName, PATHINFO_EXTENSION)) {
case 'png':
$tmpImage = thumb(imagecreatefrompng($basePath.'/'.$fileName));
imagepng($tmpImage,$pathToTumb.'/'.$fileName);
break;
case 'jpg':
$tmpImage = thumb(imagecreatefromjpeg($basePath.'/'.$fileName));
imagejpeg($tmpImage,$pathToTumb.'/'.$fileName);
break;
case 'gif':
$tmpImage = thumb(imagecreatefromgif($basePath.'/'.$fileName));
imagegif($tmpImage,$pathToTumb.'/'.$fileName);
break;
}

function thumb($img) {
$width = imagesx($img);
$height = imagesx($img);

//Calculateing tumbnails size
$newWidth = 100;
$newHeight = floor($height*(100/$width));

//Create a new tempoary image
$tmpImage = imagecreatetruecolor($newWidth,$newHeight);

imagecopyresized($tmpImage,$img,0,0,0,0,$newWidth,$newHeight,$width,$height);

return $tmpImage;
}

Для определения типа изображения без расширения файла вы можете использовать exif_imagetype() или, если это не доступно на вашем хосте, getimagesize().

1

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

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

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