2010-12-17 8 views
5

Nasza aplikacja internetowa pozwala użytkownikom pobierać dynamicznie generowane obrazy w różnych formatach (bmp, png i jpeg). Niektórzy z naszych użytkowników pobierają obrazy do druku, dlatego chcemy umożliwić im wybór między RGB lub CMYK. Czy istnieje sposób określenia modelu kolorów podczas tworzenia RenderedImage/BufferedImage? Jeśli nie, jaki jest domyślny model kolorów i jak mogę go zmienić na inny? Fragmenty kodu są mile widziane :)Jak przekonwertować obraz RGB na CMYK i odwrotnie w Javie?

Dzięki,

Olivier.

+0

Każdy powód, dla którego użytkownicy nie mogą drukować obrazów RGB? – jarnbjo

+0

możliwy duplikat [RGB do CMYK i algorytmu wstecznego] (http://stackoverflow.com/questions/4858131/rgb-to-cmyk-and-back-algorithm) –

Odpowiedz

-2

Zaproponuj użyciu fromRGB() - patrz http://download.oracle.com/javase/1.4.2/docs/api/java/awt/color/ColorSpace.html

Przykładowy kod:

java.awt.color.ColorSpace 

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

public abstract pływak [] fromRGB (float [] rgbvalue)

Zmienia kolor przyjmuje wartość domyślną CS_sRGB przestrzeń barw na tę przestrzeń ColorSpace.

Ta metoda przekształca wartości kolorów za pomocą algorytmów zaprojektowanych w celu uzyskania najlepszego dopasowania percepcyjnego między kolorami wejściowymi i wyjściowymi. Aby przeprowadzić kolorymetryczną konwersję wartości kolorów, należy użyć metody toCIEXYZ przestrzeni kolorów CS_sRGB, aby najpierw przekonwertować z wejściowej przestrzeni kolorów na przestrzeń kolorów CS_CIEXYZ, a następnie użyć metody fromCIEXYZ tej przestrzeni kolorów, aby przekonwertować z CS_CIEXYZ na wyjściowa przestrzeń kolorów. Więcej informacji można znaleźć w CIEXYZ i CIEXYZ.

+0

Nie, nie możesz tego zrobić. ColorSpace to klasa abstrakcyjna! – dogbane

+1

o blast, dobrze zauważył. W takim przypadku sugeruję pracę z niektórymi przykładami i kodem z tego wątku: http://www.java.net/forum/topic/javadesktop/java-desktop-technologies/jai-imageio/jai-imageio-covnert-cmyk-rgb-0 –

+0

Mark, ten wątek bardzo mi pomógł po tym, jak przestudiowałem klasy gazillion w JAI API. Mój kod działa jak orzeszek, ale muszę to opublikować, kiedy to się skończy. Dzięki. – Olivier

0

Niektóre formaty obrazów nie dopuszczają przestrzeni kolorów CMYK (PNG, JPEG/JFIF, GIF ...), a dla zwykłych użytkowników pożądane jest drukowanie w RGB.

Jakie są powody, dla których potrzebujesz dostarczać obrazy CMYK klientom?

-1

Aby przekonwertować obraz RGB na obraz CMYK za pomocą Javy, jednym z najprostszych sposobów jest użycie JAI (Java Advanced Image).

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

Oto kod:

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

UWAGA: "ISOcoated.icc" to mój profil ICC. Możesz go pobrać ze swojej drukarki lub gdzieś indziej.