Почему бы нескольким .png изображениям не создать этот скрипт?

редактировать

хорошо, я подумал, что это на самом деле изображение 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? Я уверен, что это так.

2

Решение

Задача ещё не решена.

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

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

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