2010-12-17 56 views
5

nuestra aplicación web permite a los usuarios descargar imágenes generadas dinámicamente en diferentes formatos (bmp, png y jpeg). Algunos de nuestros usuarios descargan las imágenes para imprimir, por lo tanto, queremos permitirles elegir entre RGB o CMYK. ¿Hay alguna manera de especificar el modelo de color al crear una Imagen renderizada/Imagen almacenada? Si no, ¿cuál es el modelo de color predeterminado y cómo puedo cambiarlo a otro? Los fragmentos de código son bienvenidos :)¿cómo puedo convertir una imagen RGB a CMYK y viceversa en Java?

Gracias,

Olivier.

+0

¿Alguna razón por la cual sus usuarios no pueden imprimir imágenes RGB? – jarnbjo

+0

posible duplicado de [RGB a CMYK y algoritmo de respaldo] (http://stackoverflow.com/questions/4858131/rgb-to-cmyk-and-back-algorithm) –

Respuesta

-2

sugerir el uso de fromRGB() - ver http://download.oracle.com/javase/1.4.2/docs/api/java/awt/color/ColorSpace.html

Código de ejemplo:

java.awt.color.ColorSpace 

ColorSpace cmyk = new ColorSpace(ColorSpace.TYPE_CMYK, 4); 
float[] values = cmyk.fromRGB(rgbFloatArray); 

flotador abstracto pública [] fromRGB (float [] rgbValue)

Transforma un color se supone que el valor está en el CS_sRGB predeterminado espacio de color en este ColorSpace.

Este método transforma los valores de color utilizando algoritmos diseñados para producir la mejor combinación perceptual entre los colores de entrada y salida. Para realizar la conversión colorimétrica de valores de color, debe usar el método toCIEXYZ del espacio de color CS_sRGB para convertir primero el espacio de color de entrada al espacio de color CS_CIEXYZ y luego usar el método fromCIEXYZ de este espacio de color para convertir de CS_CIEXYZ a el espacio de color de salida. Consulte toCIEXYZ y deCIEXYZ para obtener más información.

+0

No, no puedes hacer eso. ¡ColorSpace es una clase abstracta! – dogbane

+1

oh blast, bien manchado. En ese caso, sugiero que trabaje con algunos de los ejemplos y códigos de este hilo: http://www.java.net/forum/topic/javadesktop/java-desktop-technologies/jai-imageio/jai-imageio-covnert-cmyk-rgb-0 –

+0

Mark, este hilo en realidad me ayudó mucho después de estudiar las clases de gazillion en la JAI API. Mi código está funcionando. La tuerca necesita algo de limpieza, la publicaré cuando esté lista. Gracias. – Olivier

0

Algunos formatos de imagen no permiten espacios de color CMYK (PNG, JPEG/JFIF, GIF ...) y para los usuarios normales que imprimen en RGB es deseable.

¿Cuáles son las razones por las que necesita proporcionar imágenes CMYK a sus clientes?

-1

Para convertir una imagen RGB en una imagen CMYK de Java, una de las maneras más fáciles es usar JAI (Java Advanced Image).

Descargar JAI: http://download.java.net/media/jai/builds/release/1_1_3/

DownLoad JAI ImageIO: http://download.java.net/media/jai-imageio/builds/release/1.1/

Aquí está el código:

public static void rgbToCmyk() throws IOException{ 

    BufferedImage rgbImage = ImageIO.read(new File("C://Users//Public//Pictures//Sample Pictures//RGB_IMAGE.jpg")); 
    BufferedImage cmykImage = null; 
    ColorSpace cpace = new ICC_ColorSpace(ICC_Profile.getInstance(RbgToCmyk.class.getClassLoader().getResourceAsStream("ISOcoated.icc"))); 
    ColorConvertOp op = new ColorConvertOp(rgbImage.getColorModel().getColorSpace(), cpace, null);  
    cmykImage = op.filter(rgbImage, null); 

    JAI.create("filestore", cmykImage, "c:/tmp/CMYK_IMAGE.TIF", "TIFF"); 
} 

NOTA: "ISOcoated.icc" es mi perfil ICC. Puede obtenerlo de su impresora o en otro lugar.

Cuestiones relacionadas