Преобразование изображения в индексированный цвет с использованием настраиваемой палитры. Использование консоли. - PullRequest
5 голосов
/ 30 сентября 2011

У меня есть image.png в truecolor, palette.png (N цветов, где N> 256) или текстовый файл, где перечислены цветовые палитры RGB.Как получить изображение с этой палитрой?

Если я использую imagemagick:

convert image.png -remap palette.png remap_image.png

Не работает.

convert image.png -map palette.png remap_image.png

Дает очень плохое качество.Изображение очень шумное. Размер файла больше, чем когда-либо.

Наилучшее качество дает GIMP:

Сonvert image to indexed color > use custom palette

Но GIMP - это графический интерфейс.Мне нужно конвертировать много изображений в консоль без запуска gimp и X.org

Ответы [ 2 ]

6 голосов
/ 03 октября 2011

Использование общей палитры для нескольких изображений требует тщательно созданной палитры.Если вы не будете особенно осторожны при использовании палитры одного изображения на многих изображениях, результат будет плохим.

Это не должно быть сложным.Если у вас есть доступ к GIMP (или другому инструменту), который поддерживает графику с истинным цветом, вы можете создать большое изображение и разместить в нем все меньшие изображения, затем квантовать изображение в N цветов, а затем использовать эту палитру в качестве источника.

вы должны быть в состоянии близко имитировать поведение GIMP в консоли, используя ImageMagick

Как только вы получите изображение с истинным цветом со всеми цветами, которые вы хотите квантовать,

# Create an 8-bit png from our source, with a 235-color palette as an example.
convert truecolor_source.png -colors 235 palette.png

# Create an 8-bit png from an arbitrary image and use the palette in palette.png
convert sample.png -map palette.png output.png

Существует несколько опций для цветов понижающей дискретизации, например dithering .См. пример страницы ImageMagickv6 для превосходного обзора с примерами изображений и кода.

Хотя я до сих пор не точно понимаю, что вы хотите сделать, в настоящее время вы наиболеенедавний комментарий (« Да, от RGB до палитры будет устанавливаться независимо. Нужно установить правильное количество цветов »), похоже, все, что вы хотите сделать, это установить строгое ограничение на количество цветов в группеизображений, но им не нужно использовать одинаковую палитру.

В этом случае решение очень простое:

convert sample.png -colors 135 output.png

Попробуйте поиграть спараметры квантования, если результат вас не устраивает.

Если выходное изображение слишком велико для вашего вкуса, вы можете поэкспериментировать с параметром -quality.

Если это все еще не такt удовлетворительно, пожалуйста, попробуйте объяснить вашу цель более подробно.Удачи!

2 голосов
/ 01 ноября 2013

кошка photo.png | pngnq -s 1> photoindexed.png

...