2010-12-17 9 views
5

Mit unserer Web-App können Benutzer dynamisch generierte Bilder in verschiedenen Formaten (bmp, png und jpeg) herunterladen. Einige unserer Benutzer laden die Bilder zum Drucken herunter, daher möchten wir ihnen erlauben, zwischen RGB oder CMYK zu wählen. Gibt es eine Möglichkeit, das Farbmodell beim Erstellen eines RenderedImage/BufferedImage anzugeben? Wenn nicht, was ist das Standardfarbmodell und wie kann ich es zu einem anderen ändern? -Code-Schnipsel sind willkommen :)Wie kann ich ein RGB-Bild in Java in CMYK und umgekehrt konvertieren?

Danke,

Olivier.

+0

Warum können Ihre Benutzer keine RGB-Bilder drucken? – jarnbjo

+0

mögliches Duplikat von [RGB nach CMYK und zurück Algorithmus] (http://stackoverflow.com/questions/4858131/rgb-to-cmyk-and-back-algorithm) –

Antwort

-2

vorschlagen fromRGB() - siehe http://download.oracle.com/javase/1.4.2/docs/api/java/awt/color/ColorSpace.html

Beispielcode:

java.awt.color.ColorSpace 

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

public abstract float [] fromRGB (float [] RgbValue)

Wandelt eine Farbe Wert, von dem angenommen wird, dass er im Standard CS_sRGB ist Farbraum in diesen ColorSpace.

Diese Methode wandelt Farbwerte mit Hilfe von Algorithmen um, die die beste Übereinstimmung zwischen Eingabe- und Ausgabefarben erzeugen. Um die Farbwerte farbmetrisch zu konvertieren, verwenden Sie die Methode toCIEXYZ des CS_sRGB-Farbraums, um zuerst vom Eingabefarbraum in den CS_CIEXYZ-Farbraum zu konvertieren und anschließend die Methode fromCIEXYZ dieses Farbraums zur Konvertierung von CS_CIEXYZ in der Ausgabefarbraum Weitere Informationen finden Sie bei CIEXYZ und bei CIEXYZ.

+0

Nein, das geht nicht. ColorSpace ist eine abstrakte Klasse! – dogbane

+1

oh blast, gut entdeckt. In diesem Fall schlage ich vor, mit einigen Beispielen und Code aus diesem Thread zu arbeiten: http://www.java.net/forum/topic/javadesktop/java-desktop-technologien/jai-imagio/jai-imagio-covnert-cmyk-rgb-0 –

+0

Mark, dieser Thread hat mir wirklich sehr geholfen, nachdem ich die gazillion Klassen in der JAI API studiert habe. Mein Code arbeitet, Nuss braucht etwas Aufräumen, ich werde es veröffentlichen, wenn es fertig ist. Vielen Dank. – Olivier

0

Einige Bildformate erlauben keine CMYK-Farbräume (PNG, JPEG/JFIF, GIF ...) und für normale Anwender ist das Drucken in RGB wünschenswert.

Aus welchen Gründen müssen Sie Ihren Kunden CMYK-Bilder zur Verfügung stellen?

-1

Um RGB-Bild in CMYK-Bild von Java zu konvertieren, ist einer der einfachsten Weg, JAI (Java Advanced Image) zu verwenden.

Herunterladen 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/

Hier ist der Code:

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"); 
} 

Hinweis: "ISOcoated.icc" ist mein ICC-Profil. Sie können es von Ihrem Drucker oder woanders bekommen.

Verwandte Themen