Почему уменьшенное изображение PNG занимает больше места, чем оригинал, после изменения размера с помощью GraphicsMagic

Исходное изображение PNG имеет размер 800x1200 и занимает около 34 КБ. После изменения размера изображения с помощью GraphicsMagick до размера 320x480 результирующие изображения занимают примерно 37 КБ. (Для сравнения, если изменить размер изображения с помощью Paint в Windows 7, то результирующее изображение будет 40 КБ.) Что дает? Весь смысл изменения размера изображения заключался в экономии места. Как следует использовать GraphicsMagick для уменьшения размера изображения?


person shargors    schedule 23.12.2012    source источник


Ответы (2)


PNG является форматом без потерь и сжимает данные изображения, сначала выполняя шаг, называемый прогнозированием, а затем применяя тот же алгоритм, что и в zlib. Шаг предсказания является решающим для эффективного сжатия файла и основан на значениях более ранних соседних пикселей.

Итак, предположим, что у вас есть большой PNG в черно-белом режиме (под этим я действительно подразумеваю только черно-белый, некоторые люди иногда путают его с оттенками серого). Также предположим, что это не крошечный узор в шахматном порядке. Во многих областях этого изображения у вас будет относительно большая белая область, затем относительно большая черная область и так далее. Когда предсказатель находится внутри одной из этих больших областей, он без труда правильно предсказывает, что текущая интенсивность пикселя точно равна последней. Это облегчает лучшее сжатие данных, описывающих ваше изображение.

Теперь давайте уменьшим масштаб этого черно-белого изображения, используя какой-нибудь фильтр передискретизации, отличный от ближайшего соседа (скажем, Lanczos). У этого есть отличный шанс превратить ваше черно-белое изображение в изображение в градациях серого, которое имеет гораздо больший диапазон интенсивности. Это потенциально значительно усложняет работу предсказателя, и, следовательно, окончательный размер файла может быть больше.

Например, вот черно-белое изображение PNG 256x256, которое занимает 5440 байт, его размер изменен (с использованием 3-лепесткового Lanczos) до 120x120, что теперь занимает 7658 байт, и другое изменение размера (с использованием ближайшего соседа) до 120x120, что занимает 2467 байт.

введите здесь описание изображениявведите здесь описание изображения введите здесь описание изображения

person mmgp    schedule 03.01.2013
comment
Потрясающий! Спасибо за ваш ответ. - person shargors; 04.01.2013
comment
Кстати, в GraphicsMagick, я думаю, вы бы использовали фильтр Point при изменении размера, чтобы он использовал интерполяцию ближайшего соседа. - person mmgp; 04.01.2013

PNG — это сжатый формат. Иногда попытка сжать максимально сжатый элемент фактически приводит к увеличению размера элемента. Так вот, если 800х1200 изменить на меньший размер, но в результате сохраняется все, что было в оригинале, потому что оригинал уже максимально минимален, вы могли это увидеть. Чтобы продемонстрировать это, попробуйте использовать 7zip для сжатия некоторых данных с ультрасжатием. Затем попробуйте сжать сжатый файл. Часто второй сжатый файл будет больше первого.

person DWright    schedule 23.12.2012
comment
Спасибо за ваш ответ. Теперь это имеет смысл. Каждая дополнительная операция сжатия только добавит к исходному файлу некоторые накладные расходы, поскольку файл уже был в оптимальном состоянии сжатия. Любое последующее сжатие потребует дополнительной информации о дате, следовательно, дополнительных байтов. - person Mohammed Joraid; 22.07.2018