Так что я сделал этот скрипт, который создает эскизы на лету с 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
Если вы обнаружите, что копируете и вставляете код, вы должны превратить этот код в функцию. Ваш код может быть изменен, как показано ниже:
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()
.
Других решений пока нет …