pngcrush вызывает черный фон на некоторых изображениях

Я использую следующее для оптимизации некоторых изображений png с помощью pngcrush:

exec(
    "pngcrush -q -blacken -brute -reduce -rem alla -rem text -rem time {$source} {$destination}",
    $output,
    $return_var
);

Оптимизация работает очень хорошо, но для некоторых изображений png создает эти черные блоки там, где идет прозрачность.

Проблема исчезает, когда я удаляю опцию -reduce, но тогда оптимизация PNG делает очень мало, и она не имеет смысла запускать оптимизацию.

Я предполагаю, что проблема заключается в прозрачности, так есть ли способ сказать pngcrush, пропустить команду -reduce, только для изображений, которые не имеют прозрачности?

2 ответа

Не использовать -blacken, поскольку это является непосредственной причиной вашей проблемы.

Из журнала изменений:

Добавлена ​​опция -blacken, чтобы разрешить изменение образцов цвета любых полностью прозрачных пикселей на ноль в файлах PNG с типом цвета 4 или 6, что потенциально улучшает их сжимаемость. Обратите внимание, что это необратимое изменение с потерями: основные цвета всех полностью прозрачных пикселей теряются, если они еще не были черными.

Возможно, некоторые из ваших прозрачных пикселей не так прозрачны, как кажутся.

У меня была эта проблема на v1.7.65 только с опцией "-reduce". То же изображение и команда отлично работали на v1.7.86.

Другие вопросы по тегам