Преобразование цветов (не изображений) с помощью ImageMagick

В частности, я хотел бы точно преобразовать значение CMYK (возможно, из пространства ISO Coated v2) в значение RGB (возможно, из пространства sRGB) на платформе Ruby (возможно, используя профили ICC).

ImageMagick кажется хорошим местом для начала, но я также слышал, что LittleCMS, возможно, портировали/обертывали для работы с Ruby.

Еще раз, я хочу конвертировать отдельные цвета, а НЕ файлы изображений. Любые идеи?


person sambecker    schedule 30.10.2017    source источник
comment
Вы видели github.com/halostatue/color?   -  person msanford    schedule 30.10.2017
comment
@msanford Я думаю, что нашел, но не смог найти примеров использования. Знаете ли вы какие-либо учебные пособия/API для этого?   -  person sambecker    schedule 30.10.2017
comment
Нет, но вы можете проверить тесты, чтобы увидеть, как это реализовано github. com/halostatue/color/blob/master/test/test_cmyk.rb   -  person msanford    schedule 30.10.2017
comment
Ладно, копнул глубже. Похоже, вы не можете преобразовать CMYK, используя любое управляемое цветовое пространство. Единственная доступная функция — это @cmyk.to_rgb, которая не принимает никаких параметров.   -  person sambecker    schedule 30.10.2017


Ответы (2)


В ImageMagick вы можете сделать следующее:

convert xc:"cmyk(0,255,255,0)" -colorspace sRGB -format "%[pixel:u.p{0,0}]\n" info:
red

convert xc:"cmyk(0,255,255,0)" -profile /Users/fred/images/profiles/USWebCoatedSWOP.icc -profile /Users/fred/images/profiles/sRGB.icc -format "%[pixel:u.p{0,0}]\n" info:
srgb(93%,11%,14%)
person fmw42    schedule 30.10.2017
comment
Это выглядит очень многообещающе, но я продолжаю получать следующую ошибку в Терминале: convert: 'sRGB' @ error/convert.c/ConvertImageCommand/3251. Документы (imagemagick.org/script/convert.php) предполагают, что convert предназначен для перевод изображения, а не перевод цвета. Любые идеи? - person sambecker; 30.10.2017
comment
Какая у вас версия и платформа ImageMagick? Могут быть синтаксические различия. Если в очень старых версиях IM попробуйте заменить -colorspace sRGB на RGB. Какая команда выдала вам эту ошибку. Обязательно во второй команде укажите свой путь к своим профилям, а не мой путь. Эта команда преобразует цвет в изображение размером 1 пиксель, а затем преобразует цветовое пространство и считывает значение цвета пикселя без сохранения созданного изображения размером 1 пиксель. - person fmw42; 31.10.2017
comment
Я использую macOS Sierra 10.12 с текущей версией ImageMagick, которую я установил через Homebrew с --little-cms, хотя lcms по какой-то причине не отображается как делегат... - person sambecker; 31.10.2017
comment
Какая версия ImageMagick. Попробуйте convert -version. Если это не сработает, значит что-то не так с вашей установкой. Возможно, вам нужно установить lcms2 вместе с Homebrew ImageMagick. Моя установка ImageMagick на Mac OSX Sierra (через MacPorts для делегатов и источник для IM, показывает lcms (для lcms2). Также, если вы используете IM 7, замените convert на magick. Примечание: в imagemagick.org/contrib/color-converter.php, но не использует профили . - person fmw42; 31.10.2017
comment
Хорошо, наконец-то lcms работает с этой командой brew reinstall imagemagick --with-little-cms --with-little-cms2. Спасибо за помощь. Теперь я могу заставить следующее работать magick convert xc:"cmyk(100,0,0,0)" -profile USWebCoatedSWOP.icc -profile sRGB_IEC61966-2-1_black_scaled.icc -format "%[pixel:u.p{0,0}]\n" info: с этим результатом srgb(56.4309%,84.8676%,97.2412%)! - person sambecker; 31.10.2017
comment
Есть идеи, как встроить это в приложение Rails? stackoverflow.com/questions/47026354/ - person sambecker; 31.10.2017
comment
Есть ли что-нибудь, что вы можете настроить в формате, чтобы обеспечить более значащие цифры в ответе srgb (X%, X%, X%)? Когда я запускаю эту команду на сервере, я получаю целые числа (как в вашем примере), но когда я запускаю ее локально, я получаю четыре десятичных знака на канал (как показано в комментарии выше). - person sambecker; 31.10.2017

Есть ли что-нибудь, что вы можете настроить в формате, чтобы обеспечить более значащие цифры в srgb (X%, X%, X%)

Вероятно, из-за разных версий IM. IM 7.0.7.8 показывает srgb (93,0648%, 11,1254%, 14,1741%). IM 6.9.9.20 показывает целые числа. Я попытался добавить -precision 4 в командную строку IM 6, но все равно получаю целые числа. Чтобы получить большую точность, необходимо проанализировать выходной формат txt:.

Например без разбора:

convert xc:"cmyk(0,255,255,0)" -profile /Users/fred/images/profiles/USWebCoatedSWOP.icc -profile /Users/fred/images/profiles/sRGB.icc txt:
# ImageMagick pixel enumeration: 1,1,65535,srgb
0,0: (60990,7291,9289)  #EE3E1C7B2449  srgb(93%,11%,14%)

Итак, вам нужно разобрать 16-битные значения (для IM Q16) в скобках, а именно (60990,7291,9289)

vals=`convert xc:"cmyk(0,255,255,0)" \
-profile /Users/fred/images/profiles/USWebCoatedSWOP.icc \
-profile /Users/fred/images/profiles/sRGB.icc txt: |\
tail -n +2 | sed -n 's/^.*[(]\(.*\)[)][ ]*\#.*$/\1/p'`
red=`echo $vals | cut -d, -f1`
green=`echo $vals | cut -d, -f2`
blue=`echo $vals | cut -d, -f3`
red=`convert -precision 4 xc: -format "%[fx:100*$red/quantumrange]" info:`
green=`convert -precision 4 xc: -format "%[fx:100*$green/quantumrange]" info:`
blue=`convert -precision 4 xc: -format "%[fx:100*$blue/quantumrange]" info:`
color="srgb($red%,$green%,$blue%)"
echo "$color"
srgb(93.06%,11.13%,14.17%)

Отрегулируйте -precision для нужного количества значащих цифр.

ПРИМЕЧАНИЕ. В IM 7 параметр -precision работает.

magick xc:"cmyk(0,255,255,0)" -profile /Users/fred/images/profiles/USWebCoatedSWOP.icc -profile /Users/fred/images/profiles/sRGB.icc -format "%[pixel:u.p{0,0}]\n" info:
srgb(93.0648%,11.1254%,14.1741%)

magick -precision 4 xc:"cmyk(0,255,255,0)" -profile /Users/fred/images/profiles/USWebCoatedSWOP.icc -profile /Users/fred/images/profiles/sRGB.icc -format "%[pixel:u.p{0,0}]\n" info:
srgb(93.06%,11.13%,14.17%)

magick -precision 2 xc:"cmyk(0,255,255,0)" -profile /Users/fred/images/profiles/USWebCoatedSWOP.icc -profile /Users/fred/images/profiles/sRGB.icc -format "%[pixel:u.p{0,0}]\n" info:
srgb(93%,11%,14%)
person fmw42    schedule 31.10.2017