因为印刷需要CMYK的色彩空间的图片。用java去生成CMYK色彩的空间的图片,生成的背景颜色总是黑色,也没办法把白色覆盖上去,覆盖后变成了灰色,不知道有没有人遇到过相同的问题,部分代码如下public static void main(String[] args) throws Exception { ICC_Profile ICC_pf = null;
//读取CMYK配置文件,获取CMYK的色彩空间
String Filename = "ISOcoated_v2_eci.icc"; try {
ICC_pf = ICC_Profile.getInstance(Filename);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Can't create ICC_Profile");
}
cmykCS = new ICC_ColorSpace(ICC_pf); //输出图像文件
FileOutputStream fos = new FileOutputStream("D://test// 1.jpg"); //JPEGCodec.createJPEGEncoder的作用是创建一个和指定输出流关联的JPEGImageEncoder对象。 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
//画出画布
BufferedImage output = getImage();
JPEGEncodeParam jpegEncodeParam = encoder
.getDefaultJPEGEncodeParam(output);
jpegEncodeParam.setQuality(1f, false);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncodeParam.setXDensity(600);
jpegEncodeParam.setYDensity(600);
encoder.encode(output, jpegEncodeParam);
fos.close(); } private static BufferedImage getImage() { // 生成画布
IMAGEWIDTH = Math.round(Float.valueOf(Font_zise[CODE_LENGTH - 2]) / 2) *600/72*CODE_LENGTH;
ColorModel cmykModel = new ComponentColorModel(cmykCS, null, false,
false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE);
//此类扩展了 Raster 以提供像素写入功能 float a[]={(float) 1,(float) 1,(float)1,(float)1};
float b[]={(float) 0,(float) 0,(float)0,(float)0};
WritableRaster cmykRaster = cmykModel
.createCompatibleWritableRaster(IMAGEWIDTH, IMAGEHEIGHT); BufferedImage image=new BufferedImage(cmykModel,cmykRaster,false,null);
Color RGBColor = new Color(image.getColorModel().getColorSpace(),b, (float) 1);
Color CMYKColor = new Color(image.getColorModel().getColorSpace(),a, (float) 1);
// 获取图形上下文 (生成画笔) Graphics2D graphics = image.createGraphics();
graphics.setColor(CMYKColor); // 填充矩形区域 ,作为背景
graphics.fillRect(0, 0, IMAGEWIDTH, IMAGEHEIGHT); graphics.dispose();
return image; }
//读取CMYK配置文件,获取CMYK的色彩空间
String Filename = "ISOcoated_v2_eci.icc"; try {
ICC_pf = ICC_Profile.getInstance(Filename);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Can't create ICC_Profile");
}
cmykCS = new ICC_ColorSpace(ICC_pf); //输出图像文件
FileOutputStream fos = new FileOutputStream("D://test// 1.jpg"); //JPEGCodec.createJPEGEncoder的作用是创建一个和指定输出流关联的JPEGImageEncoder对象。 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
//画出画布
BufferedImage output = getImage();
JPEGEncodeParam jpegEncodeParam = encoder
.getDefaultJPEGEncodeParam(output);
jpegEncodeParam.setQuality(1f, false);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncodeParam.setXDensity(600);
jpegEncodeParam.setYDensity(600);
encoder.encode(output, jpegEncodeParam);
fos.close(); } private static BufferedImage getImage() { // 生成画布
IMAGEWIDTH = Math.round(Float.valueOf(Font_zise[CODE_LENGTH - 2]) / 2) *600/72*CODE_LENGTH;
ColorModel cmykModel = new ComponentColorModel(cmykCS, null, false,
false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE);
//此类扩展了 Raster 以提供像素写入功能 float a[]={(float) 1,(float) 1,(float)1,(float)1};
float b[]={(float) 0,(float) 0,(float)0,(float)0};
WritableRaster cmykRaster = cmykModel
.createCompatibleWritableRaster(IMAGEWIDTH, IMAGEHEIGHT); BufferedImage image=new BufferedImage(cmykModel,cmykRaster,false,null);
Color RGBColor = new Color(image.getColorModel().getColorSpace(),b, (float) 1);
Color CMYKColor = new Color(image.getColorModel().getColorSpace(),a, (float) 1);
// 获取图形上下文 (生成画笔) Graphics2D graphics = image.createGraphics();
graphics.setColor(CMYKColor); // 填充矩形区域 ,作为背景
graphics.fillRect(0, 0, IMAGEWIDTH, IMAGEHEIGHT); graphics.dispose();
return image; }
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货