Почему «convert x.png y.png» создает изображение другого размера (КБ)? - PullRequest
4 голосов
/ 24 сентября 2010

У меня есть несколько изображений, которые я пытаюсь нормализовать до определенного масштаба, меняя их размер. Когда я начал изменять размеры изображений, я заметил, что их объем (КБ) стал намного больше исходного изображения.

Я проверил это, просто выполнив: convert x.png y.png И получил некоторую разницу. Например. в одном случае x.png составляет 143 КБ, а y.png - 208 КБ.

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

Я использую Imagemagick 6.6.4-Q16 на Windows 7.

Спасибо, Амит

РЕДАКТИРОВАТЬ:

Спасибо за предложение, ребята, и извините за поздний ответ! Вот что я пытался сделать, и вот результаты. Исходное изображение 112 КБ. В результате преобразования без параметров получается изображение размером 169 КБ. Использование OptiPNG (PNGCrush не работал для меня) с результатом -o7 в 113 КБ. Затем я попытался выполнить преобразование -quality X для каждого X в диапазоне от 0 до 99, и обнаружил, что для качества 90 я получаю размер файла 116 КБ, поэтому OptiPNG лучше. Однако, когда я конвертирую -resize в меньшее изображение (пропорционально), я получаю 199 КБ без параметров, 196 КБ для лучшего качества конвертирования X (x = 0) и 196 КБ для OptiPNG. Это увеличение размера файла на 75%, когда я ожидаю, что размер файла будет меньше, поскольку я изменил размер изображения на 35% с 377x2290 до 234x1419. Есть мысли?

Спасибо!

РЕДАКТИРОВАТЬ - Изображения прилагаются + исследуемая проблема изменения размера:

Вот ссылка на три изображения (посмотрите на подписи): исходное изображение, изображение после простого преобразования ImageMagick и то же самое выходное изображение после optipng. http://picasaweb.google.com/101622787022351879933/ImageMagickProblem?feat=directlink

Кроме того, я думаю, что может быть проблема с опцией изменения размера ImageMagick. Я сделал следующее упражнение, чтобы изолировать его: Для каждого х от 1 до 100: convert a.png -resize x% a_x.png

Как и ожидалось, размер изображения практически постоянно увеличивается с 1% до 100%. Есть небольшое снижение на 40% и на 50%. Проблема в том, что начиная с 40%, размер выходного изображения обходит исходный размер изображения. Только после того, как вы достигнете 100%, размер изображения вернется к исходному размеру (немного больше, на самом деле, для моего первого редактирования - 169 КБ вместо 112 КБ и 113 КБ после Optipng).

Даже запуск Optipng с -o7 для каждого выходного файла не исправляет это.

Вы можете увидеть результаты этого эксперимента на графике ниже: http://picasaweb.google.com/lh/photo/fFL1W6SiUfFWhBqdUf3BZg?feat=directlink

Ответы [ 3 ]

4 голосов
/ 29 сентября 2010

Хорошо, проблема была с фильтрами согласно предложению Майкла.

Вот что я сделал:

convert -list filter > 1.txt

, чтобы получить список всех фильтров. Затем для каждого x, который является фильтром в этом списке, я сделал:

convert -filter x -resize 234x1419 a.png b_x.png

Я записал размер файла, а затем сделал «optipng -o7» для каждого файла.

Лучшим фильтром для этого изображения для моего случая был «Box»: он был единственным, который был уменьшен со 112 КБ до 111 КБ, а затем до 81 КБ при помощи optipng.

Я думаю, что интересно отметить, что после всего этого процесса только фильтр Box фактически уменьшил размер изображения, даже несмотря на то, что у всех из них меньше пикселей после процесса изменения размера.

Кстати: следите за следующей ловушкой

convert -filter Box -resize 234x1419 a.png a_box.png

В результате получается изображение размером 112 КБ, которое можно сжать до 81 КБ, как я уже говорил выше. Однако:

convert a.png -filter Box -resize 234x1419 a_box.png

приводит к изображению размером 199 КБ!

4 голосов
/ 24 сентября 2010

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

Самое простое решение - запустить PNG через OptiPNG послеImageMagick сделано с ними.По умолчанию он должен генерировать что-то, близкое к наилучшему возможному сжатию, но вы можете попросить его провести более исчерпывающее тестирование, чтобы достичь абсолютного минимума.

Относительно вашего редактирования: одна вещь, о которой вы должны знатьвот метод изменения размера.ImageMagick будет использовать фильтр во время изменения размера, и это может оказать большое влияние на то, насколько вы можете сжать изображение с помощью PNG: в конце концов, PNG - это сжатие без потерь, поэтому оно не может быть просто приблизительноJPEG.

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

1 голос
/ 24 сентября 2010

Я думаю, входные изображения не были созданы ImageMagick? Возможно, ImageMagick просто не имеет оптимального сжатия, или вход представляет собой палитру изображений, и ImageMagick создает изображение RGB. В первом случае вы можете запустить pngcrush для уменьшенных изображений, чтобы уменьшить размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...