Изменение цвета изображения с помощью imagemagick

Я хочу изменить цвета переднего плана изображения с помощью rmagick/imagemagick. Чтобы быть более конкретным: я хочу преобразовать черный или white glyphicons-halflings (которые включены в twitter bootstrap) в значки darkblue glyphicons-hallings. (Было бы неплохо, если бы я мог указать цвет hexcolor или RGB.)

Я понятия не имею, возможно ли это, но я щелкнул документацию imagemagick, и единственное, что я нашел, это convert --size 100x100 xc:skyblue glyphicons-halflings.png -composite foo.png, проблема в том, что это работает только при указании размера и изменении цвета переднего плана а не цвет фона. Кроме того, это не голубой свет.

Итак, кто-нибудь, у кого есть идея, как я могу превратить белые или черные глификоны-халфлинги в синие значки глификонов-халфлингов? (Бонусные очки для фрагментов кода rmagick/ruby)

Ответы

Ответ 1

Быстрый ответ:

convert glyphicons-halflings.png -alpha extract -background blue \
-alpha shape blue-glyphicons-halflings.png

blue-glyphicons-halflings.png

Примечание: вместо blue вы можете использовать любые именованные цвета, или RGB, или RGBA и т.д. (см. http://www.imagemagick.org/script/command-line-options.php#fill).

Объяснение

Мы "раскрашиваем" значки в двухэтапном процессе:

  • Извлеките альфа-канал из значков; (обратите внимание: цвет исходных значков не имеет значения, мы извлекаем его альфа-канал)
  • Примените указанную маску к цветному фону по вашему выбору;

Для получения дополнительной информации прочитайте следующие документы:

PS: Вышеупомянутое решение было исследовано при реализации jQuery ThemeRoller rewrite https://github.com/jquery/download.jqueryui.com/issues/77

Ответ 2

В http://www.imagemagick.org/Usage/color_basics/#replace вы можете заменить все цвета изображения darkblue на darkblue с помощью следующей команды:

convert glyphicons-halflings.png -fill darkblue +opaque darkblue glyphicons-halflings.png

Если вы хотите сделать это в рубине, я бы рекомендовал использовать камень Minimagick https://github.com/minimagic/minimagick, который просто вызывает convert в командной строке. По моему опыту, не все функции были перенесены из командной строки в RMagick

Ответ 3

В дополнение к ответу sguha - здесь версия Ruby (хотя и для QuickMagick):

require 'quick_magick'
source = "images/source.png"
dest = "images/saved.png"
foreground = "0000ff" #hex code for your colour

QuickMagick.exec3("convert #{source} -fill \"##{foreground}\" +opaque \"##{foreground}\" #{dest}")