LINUX.ORG.RU

Lossy PNG

 , , ,


0

3

Типичный сценарий: есть изображение в JPG, нужно сделать в нём вырезы, JPG не умеет в альфа-канал, посему надо сохранить результат в PNG (WebP и всякое такое не предлагать, слишком некросссофтварно пока). Но вне зависимости от того, насколько однородным был исходник — из-за артефактов JPG PNG будет сжиматься значительно хуже. Есть ли инструментарий, который делает предварительное малозаметное lossy-сжатие PNG, чтобы он в итоге сжался лучше — сглаживает цветовой шум, сглаживает переходы, чтобы они были более предсказуемыми, и т. п.? optipng и аналоги, опять же, не предлагать, он просто подбирает оптимальное сжатие lossless.

Для Ѳом неверующих вот простой пример. Картинка в PNG.

bq:10:23:50:/tmp/exp$ ls -l appleshy.png 
-rw-r--r-- 1 bodqhrohro bodqhrohro 6657 Янв 17 10:23 appleshy.png
bq:10:24:18:/tmp/exp$ convert appleshy.png -quality 80 appleshy.jpg
bq:10:24:37:/tmp/exp$ convert appleshy.jpg -quality 9 appleshy2.png
bq:10:27:34:/tmp/exp$ optipng appleshy2.png
** Processing: appleshy2.png
150x150 pixels, 3x8 bits/pixel, RGB
Input IDAT size = 23830 bytes
Input file size = 24084 bytes

Trying:
  zc = 9  zm = 8  zs = 0  f = 5		IDAT size = 22354
  zc = 9  zm = 8  zs = 1  f = 5		IDAT size = 21275
  zc = 9  zm = 8  zs = 3  f = 5		IDAT size = 21120

Selecting parameters:
  zc = 9  zm = 8  zs = 3  f = 5		IDAT size = 21120

Output IDAT size = 21120 bytes (2710 bytes decrease)
Output file size = 21374 bytes (2710 bytes = 11.25% decrease)

Было 7 кБ, после шакалинга стало 21 кБ. УЖСУЖСУЖС

$ convert appleshy.png -quality 80 appleshy.jpg
$ convert appleshy.jpg -quality 9 appleshy2.png
$ pngquant --output out.png --quality 0-30 appleshy2.png
$ du -b out.png 
3986	out.png

Сойдёт?

NeOlip ★★
()
Ответ на: комментарий от NeOlip

pngquant is a command-line conversion utility to quantize and dither truecolor PNG images, especially those with a full alpha channel, down to 8-bit (or smaller) RGBA-palette PNGs

Фигня, я таким лет шесть назад ещё баловался в Imagine. Оно-то хорошо, когда картинка маленькая и заливка монотонная, но если там градиенты?

bodqhrohro_promo
() автор топика
Ответ на: комментарий от NeOlip

хорошая программа. если ещё предварительно селективно заблюрить картинку из поста, то результат будет качественнее и меньше размером

$ convert appleshy.jpg -selective-blur 0x2+3% appleshy_blurred.png
$ pngquant 16 -fo appleshy_pngquant.png --nofs appleshy_blurred.png
$ du -b appleshy_pngquant.png
2549

сравнительного качества png можно сделать в mtpaint. предварительно заблюренное изображение надо конвертировать в indexed, используя 16 цветов, pnn квантизатор и отключить дизеринг. из того же appleshy_blurred.png получился файл размером 2684 байта.

anonymous
()

Lossy PNG

Зашёл в тред убедиться, и…

bodqhrohro_promo

…не ошибся.

По сабжу: сделай слабый выборочный блюр по цвету, в PNG оно станет ощутимо меньше места занимать.

Впрочем, анон выше это уже предложил.

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.