Правильное преобразование изображения 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)

и цвета лучше, но все равно выключен.

5 ответов


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

вы должны иметь ImageMagick, скомпилированный с маленькая система управления цветом (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 }

Я потратил много времени, пытаясь перейти от 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

вы можете скачать МУС файлы прямо из Adobe в http://www.adobe.com/support/downloads/iccprofiles/iccprofiles_win.html

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

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

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

спасибо!


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


Я обнаружил, что решение командной строки ВОЗ работает красиво, но решение RMagick не работает для меня.

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

if img.colorspace == Magick::CMYKColorspace
  img.add_profile(RGB_COLOR_PROFILE)
end 

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