Правильное преобразование изображения CMYK в RGB с помощью RMagick

Я использовал ниже, чтобы сделать преобразование цвета

    if @image.colorspace == Magick::CMYKColorspace
      # @image.colorspace #=> CMYKColorspace=12
      @image.colorspace = Magick::RGBColorspace
      @image = @image.negate
    end

Приблизительно работает, но яркость цвета отключена. Тот факт, что мне нужно свести изображение на нет, оставляет очень неприятный запах.

В документации упоминается использование color_profiles, но кроме этого я ничего не могу найти.

я сейчас пытаюсь

@image = @image.quantize(16777216, Magick::RGBColorspace)

И цвета лучше, но все равно не то.


person The Who    schedule 05.12.2009    source источник
comment
Я не знаю о Ruby и Rmagick, но сам ImageMagick может обрабатывать цветовые профили, по крайней мере, теоретически. (Сколько я себя помню, CMYK всегда был проблемой для IM). У вас возникли проблемы с применением профиля или использование профиля ничего не меняет? Какой цветовой профиль имеет поступающий материал, если он есть?   -  person Pekka    schedule 05.12.2009
comment
Входящие файлы в этом случае имеют профиль. Я буду исследовать еще немного. Я запутался с цветовыми профилями (например, где их скачать? сайт ICC не очень помог). Спасибо.   -  person The Who    schedule 05.12.2009
comment
Здесь не хватает места... См. ниже.   -  person Pekka    schedule 06.12.2009


Ответы (5)


Спасибо, Пекка, ты подсказал мне ответ (+1).

У вас должен быть скомпилирован ImageMagick с установленной Little Color Management System (LCMS). Это уже может иметь место, если использовался установщик или пакет. Но я собирал из исходников. Это было так же просто, как установить LCMS из исходного кода и пересобрать ImageMagick (./configure; make; make install).

В ImageMagick для точного воспроизведения цвета хорошо работает следующее:

convert FILENAME -profile /PATH_TO_PROFILE/sRGB.icm OUT.jpg

Итак, в RMagick я использую следующее:

if @image.colorspace == Magick::CMYKColorspace
   # Adjust the path as necessary
   @image.color_profile ="/usr/local/share/ImageMagick-6.5.4/config/sRGB.icm"
end

@image.write("out.jpg") { self.quality = 85 }
person The Who    schedule 07.12.2009
comment
Любая идея, где найти или как установить цветовые профили с ImageMagick 6.8.0? Установил его с помощью Homebrew и не могу найти файлы * .icm в моей OS X. Спасибо за ваш очень полезный ответ! - person Javier; 12.02.2013
comment
В Mac OS X вы можете выполнить 'brew install imagemagick --with-little-cms', чтобы скомпилировать imagemagick с поддержкой lcms. На всех платформах вы можете сделать: convert -list configure Строка DELEGATES должна содержать lcms, если она установлена ​​правильно. - person Christoph Eberhardt; 02.02.2015

Я потратил много времени, пытаясь перейти от CMYK EPS к RGB PNG, используя RMagick и Rails. Надеюсь, это будет кому-то полезно:

def convert_image_from_cmyk_to_rgb( image )
  #puts image.alpha?
  if image.colorspace == Magick::CMYKColorspace
    image.strip!
    image.add_profile("#{Rails.root}/lib/USWebCoatedSWOP.icc")
    image.colorspace == Magick::SRGBColorspace
    image.add_profile("#{Rails.root}/lib/sRGB.icc")
  end
  image
end

Файлы ICC можно загрузить непосредственно с сайта Adobe по адресу http://www.adobe.com/support/downloads/iccprofiles/iccprofiles_win.html

Единственное, что я не смог понять, это как сохранить прозрачность. EPS, который я хочу использовать, имеет прозрачный фон, который превращается в белый. К сожалению, я не могу сделать что-то вроде image.transparent( "white" ), так как на изображении есть белый цвет, который я хочу оставить белым.

Если я раскомментирую puts image.alpha? в приведенном выше коде, он вернет false.

Кто-нибудь знает, возможно ли то, что я пытаюсь сделать, с текущей версией RMagick, поскольку я начинаю задаваться вопросом, не поддерживается ли импорт CMYK EPS с прозрачностью.

Спасибо!

person Michael Jerome    schedule 26.07.2011
comment
Я бы посоветовал спросить о проблеме прозрачности в новом вопросе. - person Mark Ransom; 26.07.2011
comment
Спасибо, Марк. Теперь сделали это по адресу stackoverflow.com/questions/6833496/ - person Michael Jerome; 26.07.2011
comment
отредактируйте этот, чтобы убрать вопрос, чтобы остался только ответ на этот вопрос - person Kate Gregory; 31.07.2011
comment
Цветовые профили ICC для Mac можно найти здесь adobe.com/support /загрузки/ - person thomax; 14.09.2013
comment
Это двойное равно должно быть одинарным - image.colorspace = Magick::SRGBColorspace - person Arran Scott; 10.12.2014

Входящие файлы в этом случае имеют профиль. Я буду исследовать еще немного. Я запутался с цветовыми профилями (например, где их скачать? сайт ICC не сильно помог)

Вы не единственный, кто сбит с толку; Я тоже. На сайте ImageMagick есть обсуждения, которые, возможно, стоит просмотреть: Вот Насколько я тогда понял, корректная работа с профилями возможна, когда используемый профиль может быть идентифицирован (например, профиль монитора) или встроен в файл (что можно сделать хотя бы для TIFF и JPG в фотошопе, я думаю). Проверьте, например. это: здесь. Удачи.

person Pekka    schedule 05.12.2009
comment
Я думаю, приближаюсь. Похоже, Image Magick нужно скомпилировать с --with-lcms=yes и установленной библиотекой LCMS. Когда у меня будет минутка, я попробую. - person The Who; 06.12.2009

Я обнаружил, что решение командной строки The Who прекрасно работает, но решение RMagick не работает для меня.

Чтобы заставить его работать в RMagick, вместо этого мне пришлось использовать метод Magick::Image#add_format, который, согласно документации, позволит вам указать профиль источника и назначения. Это выглядит так:

if img.colorspace == Magick::CMYKColorspace
  img.add_profile(RGB_COLOR_PROFILE)
end 
person Mike Dotterer    schedule 01.03.2010

RE: LCMS на Centos 5.5, обязательно загрузите и соберите последнюю версию LCMS из исходного кода (вместо установки yum). В противном случае IM не найдет LCMS при сборке, и вы, как и я, будете ломать голову, задаваясь вопросом, почему LCMS не включена в библиотеки делегатов IM.

person danlee    schedule 03.12.2010