2009-12-05 27 views
9

He estado usando el siguiente para hacer una conversión de colorconvirtiendo correctamente una imagen CMYK a RGB con RMagick

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

Funciona, aproximadamente, pero la luminosidad del color es apagado. El hecho de que necesito negar la imagen deja un olor muy malo.

La documentación menciona el uso de color_profiles, pero más allá de eso no puedo encontrar mucho.

ahora estoy tratando

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

Y los colores son mejores, pero aún así fuera.

+0

No sé sobre Ruby y Rmagick, pero ImageMagick en sí mismo puede manejar los perfiles de color, al menos en teoría. (CMYK siempre ha sido un dolor con IM siempre que puedo recordar). ¿Tiene problemas para aplicar un perfil o el uso de un perfil no cambia nada? ¿Qué perfil de color tiene el material entrante, si hay alguno? –

+0

Los archivos entrantes, en este caso, tienen un perfil. Investigaré un poco más. Me perdí con los perfiles de color (por ejemplo, ¿dónde los descargo? El sitio ICC no fue de mucha ayuda). Gracias. –

+0

Quedando sin espacio aquí ... Ver abajo. –

Respuesta

11

Gracias Pekka, me avisaste de la respuesta (+1).

Debe tener ImageMagick compilado con el Little Color Management System (LCMS) instalado. Este puede ser el caso si se utilizó un instalador o paquete. Pero estaba compilando desde la fuente. Fue tan simple como instalar LCMS desde el origen y reconstruir ImageMagick (./configure; make; make install).

En ImageMagick el siguiente funciona bien para reproducir el color exacto:

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

Así que en RMagick utilizo el siguiente:

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 } 
+0

¿Alguna idea de dónde encontrar o cómo instalar perfiles de color con ImageMagick 6.8.0? Lo instalé usando Homebrew y no puedo encontrar ningún archivo * .icm en mi OS X. ¡Gracias por tu respuesta que de otra manera fue muy útil! – Javier

+2

En Mac OS X puedes hacer 'brew install imagemagick --with-little-cms' para obtener imagemagick compilado con soporte lcms. En todas las plataformas, puede hacer: configure -list de conversión La línea DELEGATES debe contener lcms si está instalada correctamente –

2

Los archivos entrantes, en este caso, tienen un perfil. Voy a investigar un poco más. Me perdí con los perfiles de color (? Como dónde puedo descargar ellos el sitio CPI no era de mucha ayuda)

Usted no es el único confundido; Yo fui también. Hay discusiones en el sitio de ImageMagick que podrían valer la pena: Here Por lo que entendí en aquel entonces, es posible trabajar adecuadamente con perfiles cuando el perfil utilizado puede identificarse (por ejemplo, un perfil de monitor) o está incrustado en el archivo (que se puede hacer al menos para TIFF y JPG en Photoshop, creo). Compruebe, p. esto: Here. Buena suerte.

+0

Acercando, creo. Parece que Image Magick necesita ser compilado con '--with-lcms = yes' y la biblioteca LCMS instalada. Cuando tenga un momento lo intentaré. –

2

encontré que la solución de línea de comandos de The Who funcionaba muy bien, pero la solución RMagick no funcionó para mí.

Para que funcione en RMagick, en su lugar tuve que usar el método Magick :: Image # add_format, que, de acuerdo con los documentos, le permitirá especificar un origen y un perfil de destino. Se ve así:

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

RE: LCMS en Centos 5.5, asegúrese de descargar y generar las últimas LCMS de la fuente (frente a yum install). De lo contrario, IM no encontrará LCMS en compilación y se rascará la cabeza, como yo, preguntándose por qué LCMS no está incluido en las librerías de delegados de mensajería instantánea.

4

He pasado mucho tiempo intentando pasar de un CMYK EPS a un RGB PNG usando RMagick and Rails.Esperamos que esto sea de utilidad para alguien:

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 

Usted puede descargar los archivos ICC directamente de Adobe en http://www.adobe.com/support/downloads/iccprofiles/iccprofiles_win.html

La única cosa que no he sido capaz de suss es cómo mantener la transparencia. El EPS que quiero usar tiene un fondo transparente que se convierte en blanco. Desafortunadamente no puedo hacer algo como image.transparent("white") ya que tengo blanco en la imagen que quiero mantener como blanco.

Si elimino el comentario del puts image.alpha? en el código anterior, devuelve false.

Alguien sabe si lo que estoy tratando de hacer es posible con la versión actual de RMagick, ya que estoy empezando a preguntarme si la importación de CMYK EPS con transparencia no es compatible.

Gracias!

+0

Mi consejo sería preguntar sobre el problema de transparencia en una nueva pregunta. –

+0

Gracias Mark. Lo he hecho ahora en http://stackoverflow.com/questions/6833496/rmagick-convert-cmyk-eps-to-rgb-png-maintaining-transparent-background –

+0

edítelo para sacar la pregunta de modo que quede lo que queda solo una respuesta a esta pregunta –