Почему при конвертации png в jpg некорректно заливает прозрачный фон?

Добрый день.

При загрузке на сайт png изображения, надо конвертировать его в jpg, что бы уменьшить объем. Сайт ездит на Yii и для этой задачи использую этот класс (внутри используется GD).

Столкнулся со странным поведением программы при конвертировании изображений в прозрачным фоном. Обычно прозрачный фон заливается черным, но иногда попадаются файлы у которых вокруг основного объекта на фото идет рваная черная обводка, а дальше все белое. Такая проблема возникает не со всеми файлами.

Вот пример изображения, которое конвертируется нормально (сначала png, затем результат в jpg):
490Кб

fda96437bffef2b87f747af330322786.png
e6f396d9b8a5d6e45381440375f08e68.jpg


А вот это, обрабатывается с ошибкой:
525Кб

7c101cef06d5cdbc23f012b97b091cdf.png
8249731bfe1cd3290e311d4372c8bc32.jpg


Для конвертации использую код:
$h = new СImageHandler();
$h->load('source.png')->save('res.jpg', $h::IMG_JPEG, 90);


Подскажите, почему такое может происходить? И как с этим можно бороться?
  • Вопрос задан
  • 5033 просмотра
Решения вопроса 1
Tesla
@Tesla
Все дело в особенности сохранения png в некоторых редакторах www.artlebedev.ru/tools/technogrette/img/png-3 Попробуйте склеить полупрозрачные изображения с однородной подложкой перед сохранением в jpg.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fornit1917
@fornit1917
GD вообще странная штука. Попробуйте php5-imagick. Он работает шустрее, стабильнее и кода совсем немного надо писать с ним.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы