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