Правильное преобразование изображения CMYK в RGB с помощью RMagick - PullRequest
9 голосов
/ 05 декабря 2009

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

    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)

И цвета лучше, но все еще не в порядке.

Ответы [ 5 ]

11 голосов
/ 07 декабря 2009

Спасибо, Пекка, вы сообщили мне ответ (+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 }
4 голосов
/ 26 июля 2011

Я потратил много времени, пытаясь перейти от 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, поскольку я начинаю задумываться, не поддерживается ли импорт EPS с CMYK с прозрачностью.

Спасибо!

2 голосов
/ 01 марта 2010

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

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

if img.colorspace == Magick::CMYKColorspace
  img.add_profile(RGB_COLOR_PROFILE)
end 
2 голосов
/ 06 декабря 2009

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

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

1 голос
/ 03 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...