Преобразование изображения в несжатый PNG из командной строки
У меня есть сжатое изображение PNG compressed.png
, Я могу преобразовать его в несжатый PNG decompressed.png
используя GIMP (сохранение в формате PNG и установка уровня сжатия на 0). Как это можно сделать в командной строке (Linux)?
Я помню, как делал это в прошлом, используя Imagemagickconvert
, но я забыл как. Я попробовал некоторые вещи, которые, по моему мнению, должны работать на основе документации:
convert compressed.png -compress None decompressed.png
convert compressed.png +compress decompressed.png
convert compressed.png -quality 0 decompressed.png
convert compressed.png -quality 00 decompressed.png
просто написал обычный сжатый PNG.
В сторону: зачем вам несжатый PNG?
Некоторые случаи:
- Вы хотите поддерживать эффективную (двоичную) разность данных изображения, в то же время используя другие функции формата PNG (в отличие от хранения необработанных данных изображения или BMP).
- Вы хотите сжать несколько PNG вместе в архиве tarball или 7z, но хотите продолжать использовать функции PNG. Если изображения достаточно похожи, это может дать лучшую степень сжатия, чем индивидуальное сжатие.
- Полезно в качестве базового размера для тестирования оптимизаторов PNG.
3 ответа
ImageMagick всегда будет сжимать файлы PNG. Худшее сжатие, которое вы можете получить, использует:
convert -verbose -quality 01 input.png output.png
но это зависит от содержимого изображения (0 будет использовать сжатие Хаффмана, которое иногда сжимает лучше, чем zlib).
Вы можете попробовать другие инструменты, такие как pngcrush ( http://pmt.sourceforge.net/pngcrush/), чтобы отключить сжатие:
pngcrush -force -m 1 -l 0 input.png output.png
которые создают файл того же размера, который создается GIMP при использовании уровня сжатия 0 (несколько байтов больше или меньше).
Некоторые примеры размеров (для фотографического PNG, 1600x1200):
- оригинал: 1 693 848 байт.
- после IM: 2 435 983 байта.
- после GIMP: 5,770,587 байт.
- после pngcrush: 5,802,254 байта.
Процитируем документ ImageMagick: Не все комбинации уровня сжатия, стратегии и типа фильтра PNG могут быть получены с помощью опции -quality. Для более точного управления вы можете использовать опцию -define.
Например, эта команда должна создать несжатый (RGB) файл PNG:
convert INFILE \
-define png:compression-level=0 \
-define png:compression-filter=0 \
-define png:color-type=2 \
OUTFILE.png
Вы можете получить предупреждение, которое является безвредной ошибкой. Он все равно будет выдавать правильный png. http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20257
Образец изображения:
112233 112233 112233 112233
445566 445566 445566 445566
778899 778899 778899 778899
aabbcc aabbcc aabbcc aabbcc
Блок IDAT файла PNG, созданного с помощью IM:
49444154081d013400cbff00
11223311223311223311223300
44556644556644556644556600
77889977889977889977889900
aabbccaabbccaabbccaabbcc
7d6f14b9...
Однако для определенных случаев (например, групповое сжатие) может оказаться целесообразным протестировать формат с меньшими издержками, например, TARGA (.tga).
Мне нравится набор инструментов netpbm, он разработан в традиции UNIX "программные инструменты": "пишите программы, которые делают одно и делают это хорошо".
Вы можете сделать то, что вы просили, как это:
< in.png pngtopnm > image.pnm
< in.png pngtopnm -alpha > alpha.pnm
<image.pnm pnmtopng -alpha alpha.pnm -compression 0 > out.png
rm image.pnm alpha.pnm
Вы можете потерять определенные метаданные из исходного файла png.
Это кажется немного сложным из-за способа обработки альфа-канала.
Netpbm - это инструментарий для работы с графическими изображениями, включая преобразование изображений в различные форматы. В пакете более 220 отдельных инструментов, включая конвертеры для более чем 80 графических форматов.