Мой код Java для преобразования CMYK jpeg в результаты RGB в выходном изображении, являющемся слишком легким - видит код ниже. Кто-либо может предложить корректный способ сделать преобразование?
Следующий код требует, чтобы Java Усовершенствованное Изображение IO считал jpeg и example-cmyk.jpg
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import javax.imageio.ImageIO;
public class TestCmykToRgb {
public static void main(String[] args) throws Exception {
BufferedImage cmykImage = ImageIO.read(new File(
"j:\\temp\\example-cmyk.jpg"));
BufferedImage rgbImage = new BufferedImage(cmykImage.getWidth(),
cmykImage.getHeight(), BufferedImage.TYPE_INT_RGB);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(cmykImage, rgbImage);
ImageIO.write(rgbImage, "JPEG", new File("j:\\temp\\example-rgb.jpg"));
}
}
CMYK в / из RGB затруднен - вы преобразуете аддитивный и субтрактивный цвет. Если вам нужно точное совпадение, вам нужно изучить профили цветового пространства для каждого устройства. То, что выглядит нормально в одном цветовом пространстве, обычно не работает при физическом преобразовании в другое (то есть правильный вывод CMYK, а не наивный предварительный просмотр на мониторе).
По моему собственному опыту, преобразование RGB в CMYK наивно приводит к получению слишком темного изображения. Учитывая, что вы сообщаете об обратном в обратном направлении, вероятно, будет найдена приблизительная кривая регулировки яркости, которая будет работать хорошо (но остерегайтесь странных нелинейностей в цветовом пространстве). Если у вас есть доступ к Photoshop, я понимаю, что у него есть какая-то опция предварительного просмотра CMYK, которая может ускорить процесс определения такого приближения.