Как я могу преобразовать изображение RGB в CMYK и наоборот в Java? - PullRequest
5 голосов
/ 17 декабря 2010

наше веб-приложение позволяет пользователям загружать динамически сгенерированные изображения в различных форматах (bmp, png и jpeg). Некоторые из наших пользователей загружают изображения для печати, поэтому мы хотели бы позволить им выбирать между RGB или CMYK. Есть ли способ указать цветовую модель при создании RenderedImage / BufferedImage? Если нет, то какая цветовая модель по умолчанию и как я могу изменить ее на другую? Фрагменты кода приветствуются:)

Спасибо

Оливье.

Ответы [ 4 ]

0 голосов
/ 16 мая 2013

Для преобразования изображения RGB в изображение CMYK с помощью Java одним из самых простых способов является использование JAI (Java Advanced Image).

Загрузка 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.Вы можете получить его на своем принтере или в другом месте.

0 голосов
/ 17 декабря 2010

Предложить использование 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);

публичный абстрактный float [] fromRGB (float [] rgbvalue)

Преобразует значение цвета, которое предполагается в цветовом пространстве CS_sRGB по умолчанию, в это ColorSpace.

Этот метод преобразует значения цвета с помощью алгоритмов, разработанных для получения наилучшего воспринимаемого соответствия между входными и выходными цветами. Чтобы выполнить колориметрическое преобразование значений цвета, следует использовать метод toCIEXYZ цветового пространства CS_sRGB, чтобы сначала преобразовать из входного цветового пространства в цветовое пространство CS_CIEXYZ, а затем использовать метод fromCIEXYZ этого цветового пространства для преобразования из CS_CIEXYZ в выходное цветовое пространство. Смотрите toCIEXYZ и fromCIEXYZ для получения дополнительной информации.

0 голосов
/ 06 марта 2011

Некоторые форматы изображений не допускают цветовые пространства CMYK (PNG, JPEG / JFIF, GIF ...) и для обычных пользователей желательна печать в RGB.

По каким причинам вам необходимо предоставлять изображения CMYK своим клиентам?

...