редактировать
хорошо, я подумал, что это на самом деле изображение JFIF jpg, сохраненное как .png. Изменение сценария работает следующим образом:
// load image and get image size
// switch ($ext) {
// case 'jpg':
// case 'jpeg':
// $img = imagecreatefromjpeg($uri_source);
// break;
// case 'png':
// $img = imagecreatefrompng($uri_source);
// break;
// case 'gif':
// $img = imagecreatefromgif($uri_source);
// break;
// }
if (!$img = imagecreatefromjpeg($uri_source)) {
if (!$img = imagecreatefrompng($uri_source)) {
if (!$img = imagecreatefromgif($uri_source)) {
die($index);
}
}
}
Я пишу небольшой скрипт, который создает миниатюру для каждого n изображений в папке. Пока все работает отлично, за исключением странного факта, что несколько миниатюр не будут созданы. Все они являются .pngs, но многие другие файлы .png работают, поэтому я думаю, что это не сам скрипт. Есть какие-нибудь подсказки?
$dir = opendir($path_source);
while (false !== ($fname = readdir($dir)) && $index < $limit ) {
$info = pathinfo($path_source . $fname);
if ( isset($info['extension']) && preg_match('~(jpg|jpeg|png|gif)~', strtolower($info['extension'])) ) {
$uri_source = $path_source . $fname;
$uri_dest = $path_dest . $fname;if (!file_exists($path_dest . $fname)) {
$ext = strtolower($info['extension']);
// load image and get image size
switch ($ext) {
case 'jpg':
case 'jpeg':
$img = imagecreatefromjpeg($uri_source);
break;
case 'png':
$img = imagecreatefrompng($uri_source);
break;
case 'gif':
$img = imagecreatefromgif($uri_source);
break;
}
$width = imagesx( $img );
$height = imagesy( $img );
$thumb_height = floor( $height * ( $thumb_width / $width ) );
$tmp_img = imagecreatetruecolor( $thumb_width, $thumb_height );
imagecopyresampled( $tmp_img, $img, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height );
// save thumbnail into a file
// switch ($ext) {
// case 'jpg':
// case 'jpeg':
// imagejpeg( $tmp_img, $uri_dest );
// break;
// case 'png':
// imagesavealpha($tmp_img, true);
// imagealphablending($tmp_img, true);
// imagepng( $tmp_img, $uri_dest );
// break;
// case 'gif':
// imagegif( $tmp_img, $uri_dest );
// break;
// }
// trying to force a jpg thumb, still doesnt work
$uri_dest = str_replace('.png', '.jpg', $uri_dest);
imagejpeg( $tmp_img, $uri_dest );
imagedestroy($tmp_img);
}
$thumbs[] = '<a href="' . $uri_source . '" ' . $link_attributes . '><img ' . $img_attributes . ' src="' . $uri_dest . '" class="thumb" /></a>';
$index++;
}}
closedir($dir);
на выигрышной машине, используя мамп.
Я проверил журнал ошибок, иногда это появляется:
imagecreatefrompng (): ‘path / to / file.png’ не является допустимым файлом PNG
в результате чего
imagesx () ожидает, что параметр 1 будет ресурсом, логическое значение imagesy ()
ожидает, что параметр 1 будет ресурсом, логическое значение задано делением на ноль
imagecreatetruecolor (): неверные размеры изображения imagecopyresampled ()
ожидает, что параметр 1 будет ресурсным, логическое значение ожидает imagejpeg ()
параметр 1 должен быть ресурсом, логическое значение, которое ожидает imagedestroy ()
параметр 1 будет ресурсом, задан логический
но почему файл не является действительным png? Я уверен, что это так.
Задача ещё не решена.
Других решений пока нет …