Как сохранить 8-битные PNG с помощью ChunkyPNG или RMagick - PullRequest
4 голосов
/ 28 июня 2011

Я пытался сохранить 8-битные PNG (PNG8), используя RMagick (http://rmagick.rubyforge.org/) и ChunkyPNG (https://github.com/wvanbergen/chunky_png)), но не смог этого сделать.

Однако единственный раз, когда я могу заставить его работать на RMagick, это если установка ImageMagick основана на QuantumDepth 8, а не на обычном 16. Изменить этот параметр на лету невозможно - установка ImageMagick имеет быть скомпилированным с этим параметром. Также установка глубины 8 при создании изображения или префикса типа формата при сохранении не имеет никакого эффекта.

т. img.write('PNG8:image.png')

В любом случае, я взглянул на ChunkyPNG, и я действительно предпочитаю использовать его вместо RMagick - просто потому, что он чистый Ruby и не зависит от ImageMagick. Я не могу сохранить PNG8, используя это тоже.

После этого мне нужно преобразовать PNG в 8 бит, используя графическую программу -

Мои вопросы:

  1. Есть ли способ сохранить 8-битные PNG-файлы правильно, как это делается в ImageMagick Q8 на компьютере с установленным ImageMagick Q16?

  2. Может кто-нибудь предоставить указатели, как сделать мой собственный 4-битный кодировщик в ChunkyPNG, или узнать, как сохранить PNG8 с его помощью?

Заранее спасибо ..

1 Ответ

5 голосов
/ 28 июня 2011

Что именно вы подразумеваете под PNG8?8-битная шкала серого, 8-битный индексированный цвет, 3x8 бит RGB или 4x8 бит RGBA?Все эти цветовые режимы поддерживаются ChunkyPNG.

По умолчанию ChunkyPNG пытается определить лучший цветовой режим для сохранения изображения.Вы можете перезаписать его, указав хэш опций для метода сохранения:

image.save('filename.png', color_mode: ChunkyPNG::COLOR_TRUECOLOR)
# Or: ChunkyPNG::COLOR_TRUECOLOR_ALPHA    

image.to_blob(color_mode: ChunkyPNG::COLOR_INDEXED, bit_depth: 8)

Дополнительная информация: https://github.com/wvanbergen/chunky_png/wiki

...