簡體   English   中英

如何在Java中將RGB圖像轉換為CMYK,反之亦然?

[英]how can I convert an RGB image to CMYK and vice versa in Java?

我們的網絡應用程序允許用戶以不同的格式(bmp,png和jpeg)下載動態生成的圖像。 我們的一些用戶下載圖像進行打印,因此我們希望允許他們在RGB或CMYK之間進行選擇。 有沒有辦法在創建RenderedImage / BufferedImage時指定顏色模型? 如果沒有,默認顏色模型是什么?如何將其更改為另一個? 歡迎使用代碼片段:)

謝謝,

奧利維爾。

某些圖像格式不允許CMYK色彩空間(PNG,JPEG / JFIF,GIF ...),而普通用戶則需要以RGB格式打印。

您需要向客戶提供CMYK圖像的原因是什么?

要通過Java將RGB圖像轉換為CMYK圖像,最簡單的方法之一是使用JAI(Java高級圖像)。

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

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

這是代碼:

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

注意:“ISOcoated.icc”是我的ICC配置文件。 您可以從打印機或其他地方獲取。

建議使用fromRGB() - 參見http://download.oracle.com/javase/1.4.2/docs/api/java/awt/color/ColorSpace.html

示例代碼:

java.awt.color.ColorSpace

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

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

將假定為默認CS_sRGB顏色空間的顏色值轉換為此ColorSpace。

此方法使用設計用於在輸入和輸出顏色之間產生最佳感知匹配的算法來轉換顏色值。 為了進行顏色值的比色轉換,您應該使用CS_sRGB顏色空間的toCIEXYZ方法首先從輸入顏色空間轉換為CS_CIEXYZ顏色空間,然后使用此顏色空間的fromCIEXYZ方法從CS_CIEXYZ轉換為輸出顏色空間。 有關詳細信息,請參閱CIEXYZ和fromCIEXYZ。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM