Вопрос

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

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

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

Это было полезно?

Решение 3

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

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

Другие советы

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

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

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

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

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

Я думаю, что объект ImageMagick, который вы после чего могут быть квантование:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top