You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Kris Wolff <kw...@intra-team.de> on 2007/01/14 00:33:47 UTC
cmyk2rgb color convension
Hi folks,
a long while ago (2001) Thomas Kübler posted a source to this list
(fop-dev@xml.apache.org) to convert rgb images to cmyk with icc
profiles:
http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-dev/
200111.mbox/%3C005c01c171a2$35d97950$3c00a8c0@entwickler%3E
(becuse this is more a jai question i post it to jai list, too)
I tryed to change all cmyk to rgb and all rgb to cmyk to do the other-
way-round. But i faild with an
java.lang.IllegalArgumentException: Numbers of source Raster bands
and source color space components do not match
at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:
437)
at
com.sun.media.jai.opimage.ColorConvertOpImage.computeRectNonColorSpaceJA
I(ColorConvertOpImage.java:369)
at com.sun.media.jai.opimage.ColorConvertOpImage.computeRect
(ColorConvertOpImage.java:289)
at javax.media.jai.PointOpImage.computeTile
(PointOpImage.java:919)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile
(SunTileScheduler.java:912)
at javax.media.jai.OpImage.getTile(OpImage.java:1139)
at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2356)
at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2292)
at javax.media.jai.RenderedOp.copyData(RenderedOp.java:2296)
at nextgen.cmyk2rgb_ICC.main(cmyk2rgb_ICC.java:81)
can someont tell me how to do the trick cmyk2rgb?? I need it because
i have to display cmyk images in a renderd png, but png output of fop
can not handle cmyk, so i need to transfer them into rgb.
Thank you in advanced,
ven
PS my code so far:
/*
* cmyk_handles.java
*
* Created on January 13, 2007, 11:20 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package nextgen;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.color.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.media.jai.*;
/**
*
* @author kriswolff
*/
public class cmyk2rgb_ICC {
private static boolean invert = false;
private static String cmykdatei = "/tmp/myimage.jpg";
/** Creates a new instance of cmyk_handles */
public cmyk2rgb_ICC() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int[] bitsRGB = {8,8,8};
String cmykProfile = "/Library/Application Support/Adobe/
Color/Profiles/Photoshop4DefaultCMYK.icc"; // icc-profile cmyk
String rgbProfile = "/Library/Application Support/Adobe/
Color/Profiles/Recommended/AppleRGB.icc";// icc-profile rgb
// Dateiname f?r die Ausgabe
StringTokenizer st = new StringTokenizer(cmykdatei,".");
StringBuffer buffer = new StringBuffer();
while ( st.hasMoreTokens() ) {
buffer.append(st.nextToken());
buffer.append("_rgb");
buffer.append(".jpg");
break;
}
try {
RenderedImage inputCMYK = JAI.create("fileload",cmykdatei);
// Create a RGB Color Space from rgbProfile
ICC_Profile p = ICC_Profile.getInstance(new
FileInputStream(rgbProfile));
ColorSpace csRGB = new ICC_ColorSpace(p);
ColorModel colorModelRGB = new ComponentColorModel
(csRGB,bitsRGB,false,false,Transparency.OPAQUE,DataBuffer.TYPE_BYTE);
ImageLayout rgbLayout = new ImageLayout();
rgbLayout.setColorModel(colorModelRGB);
RenderingHints hints = new RenderingHints
(JAI.KEY_IMAGE_LAYOUT,rgbLayout);
rgbLayout.setSampleModel
(colorModelRGB.createCompatibleSampleModel(inputCMYK.getWidth
(),inputCMYK.getHeight()));
java.awt.image.renderable.ParameterBlock pb = new
java.awt.image.renderable.ParameterBlock();
pb.addSource(inputCMYK);
pb.add(colorModelRGB);
// convert the image from rgb-colorspace to cmyk-
colorspace with icc
PlanarImage out = JAI.create("ColorConvert",pb,hints);
// Damit photoshop die Bilddaten nicht invertiert
anzeigt erfolgt
// eine invertierung der Daten
// pb = new java.awt.image.renderable.ParameterBlock();
// pb.addSource(out);
// PlanarImage out2 = JAI.create("invert",pb);
WritableRaster rgbRaster = out.copyData();
// ?ffnen des Output-Streams
OutputStream datei = new FileOutputStream(buffer.toString
());
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder
(datei);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam
(rgbRaster,JPEGEncodeParam.COLOR_ID_RGB);
param.setQuality(1, false);
encoder.encode(rgbRaster, param);
datei.close();
System.out.println("Bild erfolgreich gespeichert");
} catch (Exception e) {
e.printStackTrace();
}
}
}