Нужна помощь в понимании опции ImageMagick / Graphicsmagick -colors - PullRequest
0 голосов
/ 18 ноября 2010

Я пытаюсь программно уменьшить (с потерями) размер файлов PNG и GIF. В рамках этого мне нужно уменьшить количество цветов на изображениях. Я не хочу сводить все изображения к одному значению цвета, поэтому я занимаюсь этим; затем получить количество уникальных цветов на изображении; разделите это число на 2, чтобы уменьшить количество цветов вдвое.

Проблема в том, что это не работает. Использование ImageMagic слишком медленное и не уменьшает размер файла, если изображение не содержит несколько сотен уникальных цветов. Использование GraphicsMagick всегда приводит к уникальному значению цвета до 255 независимо от того, сколько цветов было в исходном изображении. Другая проблема с GraphicsMagick состоит в том, что если на изображении есть прозрачные пиксели, он заменяет потерянные цвета прозрачными.

Любая помощь будет с благодарностью, Спасибо.

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

Я думаю, что средство ImageMagick, к которому вы стремитесь, может быть квантованием:

http://www.imagemagick.org/Usage/quantize/

1 голос
/ 18 ноября 2010

Уменьшение количества цветов полезно только в том случае, если

  1. изображение может использовать палитру вместо сохранения цвета для каждого пикселя
  2. размер индекса палитры меньшечем размер цвета
  3. формат изображения поддерживает размер палитры

Я думаю, вы можете получить только 1-битный, 4-битный, 8-битный, поэтому 2-цветный, 16-цветный или 256-цветный в этих форматах.Я думаю, что если вы просите больше, вы просто усекаетесь до 256. Если вы просите меньше, он просто не использует всю палитру.

Рассматривали ли вы преобразование в JPEG и воспроизведение с настройкой качества?Вы в конечном итоге с более точным контролем зерна потерь.Недостатком является то, что изображения не являются фотографиями, но, похоже, они имеют много цветов, поэтому они могут быть.

Возможно, выберите 1, 4, 8 бит, если он близок к тому, что вы хотите, и JPEGесли у него много цветов.

0 голосов
/ 01 декабря 2010

Первая проблема, GraphicsMagick может быть скомпилирован с использованием 8-битных, 16-битных или 32-битных квантовых уровней.Моя версия скомпилирована в 8 бит (по умолчанию), это означает, что максимальное количество цветов, которое может быть назначено изображению, составляет 256 уникальных цветов (3 * 3 * 2, 1 из синих битов удаляется, потому что человеческий глаз можетне вижу это правильно).Очевидно, что GraphicsMagick может обрабатывать изображения с большим количеством цветов, чем этот, но при уменьшении цветов он может уменьшить только до 256 или менее цветов.Большие пиксельные кванты заставляют GraphicsMagick работать медленнее и требовать больше памяти.Например, использование 16-битных квантов пикселей приводит к тому, что GraphicsMagick работает на 15-50% медленнее (и занимает в два раза больше памяти), чем при его создании для поддержки восьмибитных квантов пикселей.

Вторая проблема;обработка прозрачности в изображениях PNG, я использовал более раннюю версию GraphicsMagick (я думаю, что 1.1), во всяком случае, когда я обновился до версии 1.3, эта проблема больше не присутствует, что говорит мне, что это была ошибка в GraphicsMagick 1.1, которая привела к этому.*

...