Какие параметры для преобразования (ImageMagick или GraphicsMagick) дают наименьший (размер файла) PNG? - PullRequest
13 голосов
/ 19 ноября 2010

ImageMagick создает несколько довольно больших PNG. GraphicsMagick намного лучше, но я все еще ищу лучшие варианты для конвертации, чтобы получить самый маленький размер файла png.

У меня есть большой png с небольшим размером файла , и, передавая это через IM-конвертирование, я не смог достичь этого размера файла, не говоря уже о том, чтобы уменьшить его. С GM convert я могу получить его немного меньше, но я ищу улучшения, обычно для любого изображения , с которым я сталкиваюсь.

gm convert -quality 95 a_png.png gm.png
convert -quality 95 -depth 8 a_png.png im.png
gm identify *

a_png.png PNG 2560x2048+0+0 PseudoClass 256c 8-bit 60.1K 0.000u 0:01
gm.png[1] PNG 2560x2048+0+0 PseudoClass 256c 8-bit 60.0K 0.000u 0:01
im.png[2] PNG 2560x2048+0+0 DirectClass 8-bit 130.2K 0.000u 0:01 

Какие опции для конвертирования дают наименьший размер файла PNG?

(Да, я знаком с OptiPNG, PNGOUT и Pngcrush. Но мне нужно кое-что, что будет доступно без вопросов для каждого * nix-бокса, на котором я случайно оказался.)

Ответы [ 3 ]

11 голосов
/ 24 ноября 2010

Похоже, вы и я ищем один и тот же ответ.К сожалению, не так много людей с хорошим знанием GraphicsMagick.Это то, что я узнал до сих пор:

Оператор качества не работает должным образом для любого изображения, кроме JPEG.Для меня это просто увеличило размер файла при использовании в PNG и GIF.

Я сделал это с моими файлами PNG и GIF, чтобы уменьшить их размер:

gm convert myImage.png +dither -depth 8 -colors 50 myImage.png
  • +dither останавливает любое размывание изображения, когда цвета уменьшены.(это уменьшает размер файла)

  • -depth 8, вероятно, не требуется, поскольку большинство файлов PNG уже имеют глубину 8.

  • -colors 50 уменьшаетколичество цветов в изображении до 50, это единственный способ действительно уменьшить размер изображения, хранящегося в формате без потерь, таком как PNG или GIF.

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

gm identify -format "file_size:%b,unique_colors:%k,bit_depth:%q" myImage.png

Для моего изображения;это возвращает

file_size:100.7k,unique_colors:13455,bit_depth:8

Проблема в том, что, когда GraphicsMagick уменьшает цвета, он всегда уменьшается как минимум до 255, поэтому вы не можете, например, установить количество цветов равным 300.Также, кажется, есть проблема с альфа-каналом для файлов PNG;Если изображение имеет прозрачность, уменьшение цвета заменяет эти цвета прозрачными;с помощью imagemagick этого не происходит.

6 голосов
/ 21 апреля 2011

Я только что столкнулся с этим вопросом снова, поэтому я обновлю, GraphicsMagick и ImageMagick имеют серьезную проблему.Они не могут записывать PNG-изображения с использованием фрагмента tRNS, что означает, что если вы попытаетесь прочитать изображение с фрагментом tRNS, а затем записать его, изображение будет намного больше.GM не лучший инструмент для сжатия изображений.Вам нужно использовать отдельный инструмент, такой как OptiPNG, чтобы снова сжать PNG после использования Image / GraphicsMagick.Я получаю файлы на 60% меньше при использовании OptiPNG после запуска GraphicsMagick для изображения.

Также мне было интересно, если вы столкнулись с проблемой, касающейся изображений RGBA и битовой глубины.Для некоторых изображений я получаю исключение "Недопустимая битовая глубина".Я не вижу причин, почему.

2 голосов
/ 03 мая 2013

Я не нашел способа сделать это в командной строке, но я нашел этот бесплатный сайт (http://tinypng.org/), который отлично работает, мое тестовое изображение получило сокращение на 71%, окончательный размер был только 29% оригинала. Похоже, вы можете дать ему 20 изображений за раз. Я смотрю, как они это делают.

http://tinypng.org/

...