Уменьшение цвета изображения PNG приводит к увеличению размера файла

Я использую ImageMagick для программного уменьшения размера изображения PNG за счет уменьшения цвета изображения. Я получаю изображения unique-colors и делю это на 2. Затем я присваиваю это значение параметру -colors следующим образом:

переменная = уникальные цвета / 2

convert image.png -colors variable -depth 8

Я думал, что это существенно уменьшит размер изображения, но вместо этого он увеличивает размер изображения на диске. Может ли кто-нибудь пролить свет на это.

Спасибо.

РЕДАКТИРОВАТЬ: Оказывается, проблема заключалась в дизеринге. Дизеринг помогает вашим уменьшенным цветным изображениям больше походить на оригиналы, но увеличивает размер изображения. Чтобы удалить дизеринг в ImageMagick, добавьте + дизеринг к вашей команде. Пример

convert CandyBar.png + dither -colors 300 -depth 8 меньшеCandyBar.png


person toc777    schedule 17.11.2010    source источник
comment
Было бы полезно, если бы вы могли дать нам ссылки на два образца PNG-файлов. Тем не менее, я сначала предполагаю, что последний файл создается без какого-либо сжатия. Помните, что формат PNG поддерживает несколько уровней сжатия.   -  person    schedule 17.11.2010
comment
Я использую функцию идентификации, чтобы увидеть, какое сжатие выполняется, оба изображения используют одинаковое сжатие (Zip). Уровни сжатия являются для меня проблемой, потому что даже с качеством 90 (максимальное сжатие для ImagicMagick PNG) создается файл гораздо большего размера. По этой причине я не использую вариант качества.   -  person toc777    schedule 17.11.2010


Ответы (3)


Imagemagick, вероятно, использует некоторый алгоритм дизеринга, чтобы изображение выглядело так, как будто оно имеет исходное количество цветов. Это увеличивает «случайность» данных изображения (отдельные пиксели перекрашиваются в некоторых местах для смешивания с другими цветами), и эти данные изображения также больше не упаковываются. Дальнейшее исследование того, как команда convert выполняет дизеринг. Вы также можете увидеть этот эффект, добавив второе изображение в качестве слоя в gIMP / аналогичной программе и настроив прозрачность.

person Pasi Savolainen    schedule 17.11.2010
comment
Дерьмо, дерьмо, дерьмо, дерьмо, вы совершенно правы. Я понятия не имел, что дизеринг добавил столько байтов к изображению; Все это имеет смысл сейчас. Я потратил столько времени, пытаясь понять это. Большое спасибо. - person toc777; 17.11.2010

Для этого вам следует использовать pngquant.

Количество цветов угадывать не нужно, оно имеет актуальную --quality настройку:

pngquant --verbose --quality=70 image.png

Вышеупомянутое автоматически выберет количество цветов, необходимое для соответствия заданному качеству в той же шкале, что и качество JPEG (100 = идеально, 70 = хорошо, 20 = ужасно).

pngquant имеет существенно лучший алгоритм квантования, и чем лучше квантование, тем лучше соотношение качество / размер файла.

И pngquant не сглаживает области, которые хорошо выглядят без сглаживания, и это позволяет избежать добавления ненужного шума / случайности в файл.

person Kornel    schedule 06.03.2013

Сжатие «нового» PNG не так хорошо, как у оригинала.

person Daniel    schedule 17.11.2010
comment
Извините, но я не совсем понимаю. Как может алгоритм сжатия изображения быть настолько хорош, что он производит изображение меньшего размера, даже когда 70% цветов удаляются для компрессора ImagicMagick? - person toc777; 17.11.2010