Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Изменение PNG-изображения


Автор: zodiac 17.12.2011, 13:39
Здравствуйте! У меня есть скрипт, который меняет размер PNG изображения. Однако по какой-то причине, что бы я ни делал, получить уменьшенную копию картинки не удается - результатом всегда является сообщение "Изображение %filename% не может быть показано, так как содержит ошибки". Включение error_reporting(E_ALL) и отключение заголовка с типом, чтобы посмотреть список ошибок, ни к чему не привело, из чего я сделал вывод, что в коде ошибок не имеется (что неудивительно).
Остается сервер, однако в phpinfo явно написано, что поддержка PNG включена. И в чем причина сбоев, я могу только гадать. Подскажите, пожалуйста, где может скрываться проблема?

P.S. Доступа к php.ini не имеется. Хостинг только куплен, так что, может быть, этого файла там просто нет (может, его надо создавать вручную?)

Собственно, код (на всякий случай).
Код

$pic=$_GET['pic'];
$q=100;$w=$_GET[w];$h=$_GET[h];

$image = getimagesize($pic);

header("Content-type: image/png");
$imgsource = @imagecreatefrompng($pic);

$src_w = imagesx($imgsource);
$src_h = imagesy($imgsource);
$dx = $src_w / $w;
$dy = $src_h / $h;

$d = max($dx, $dy);

$new_w = $src_w / $d;
$new_h = $src_h / $d;

$imgdest = imagecreatetruecolor($new_w, $new_h);
imageAlphaBlending($imgdest, false);
imageSaveAlpha($imgdest, true);
imagecopyresampled($imgdest, $imgsource, 0, 0, 0, 0, $new_w, $new_h, $src_w, $src_h);

imagepng($imgdest, '');

imagedestroy($imgdest);
imagedestroy($imgsource);

Автор: WolfAlone 17.12.2011, 16:09
Попробуйте изменить размер изображения другого формата. Если всё получиться, значит нет поддержки PNG. Если нет - значит, ошибки в коде.

Ещё можно попробовать сохранить изображение перед тем как отдавать его в браузер.

Так же, стоит внимательно посмотреть, не залетел ли где-то какой-нибудь зловредный символ, перед тем как изображение было отправлено в браузер.

Автор: $дмитрий 17.12.2011, 16:42
Цитата

Включение error_reporting(E_ALL) и отключение заголовка с типом, чтобы посмотреть список ошибок, ни к чему не привело

Не забываем про директиву display_errors

Цитата

Подскажите, пожалуйста, где может скрываться проблема?

1. Путь к картинке $_GET['pic'] лучше задавать абсолютный
2. Зачем задавать второй параметр? imagepng($imgdest, '');
3. Исходный файл png может быть битым

 

Автор: zodiac 18.12.2011, 00:43
Цитата(WolfAlone @  17.12.2011,  16:09 Найти цитируемый пост)
изменить размер изображения другого формата

С другими форматами работает отлично, т.к. адаптировал из аналогичной функции для jpeg'a...

Цитата($дмитрий @  17.12.2011,  16:42 Найти цитируемый пост)
Не забываем про директиву display_errors

Спасибо, вспомнил  smile Плюсом к ней и display_startup_errors...

Цитата($дмитрий @  17.12.2011,  16:42 Найти цитируемый пост)
Зачем задавать второй параметр?

Как я уже говорил выше, я адаптировал для png-файлов функцию, уменьшающую jpeg-изображения. Опускать имя файла я не стал, просто указал пустое, на всякий случай, однако в этом и была ошибка.
Включение забытой ранее display_errors привело к появлению сообщения о "неправильном имени файла". Параметр был убран, и все заработало.
Что интересно, во всех исходниках, которые я находил на форумах, этот параметр был...

Всем большое спасибо за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)