java cmyk转rgb_图片 CMYK转RGB 代码
//大部分情况都转换没问题,有极个别的转换不成功。现在想,是不是调用convert.exe 更方便 呵呵
private static boolean isCMYK(String filename) {
boolean result = false;
BufferedImage img = null;
try {
img = ImageIO.read(new File(filename));
} catch (IOException e) {
System.out.println(e.getMessage() + ": " + filename);
try {
//把这个文件拷贝出来
FileUtils.copyFile(new File(filename), new File("/var/ftp/" + FilenameUtils.getName(filename)));
} catch (IOException ex) {
java.util.logging.Logger.getLogger(CMYK2RGB.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (img != null) {
int colorSpaceType = img.getColorModel().getColorSpace().getType();
result = colorSpaceType == ColorSpace.TYPE_CMYK;
}
return result;
}
// extract metadata
public static BufferedImage readImage(File file) throws IOException {
// Get an ImageReader.
try {
ImageInputStream input = ImageIO.createImageInputStream(file);
Iterator readers = ImageIO.getImageReaders(input);
if (readers == null || !readers.hasNext()) {
return null;
}
ImageReader reader = (ImageReader) readers.next();
reader.setInput(input);
String format = reader.getFormatName();
if ("JPEG".equalsIgnoreCase(format) || "JPG".equalsIgnoreCase(format)) {
try {
IIOMetadata metadata = reader.getImageMetadata(0);
String metadataFormat = metadata.getNativeMetadataFormatName();
IIOMetadataNode iioNode = (IIOMetadataNode) metadata.getAsTree(metadataFormat);
NodeList children = iioNode.getElementsByTagName("app14Adobe");
if (children.getLength() > 0) {
try {
iioNode = (IIOMetadataNode) children.item(0);
int transform = Integer.parseInt(iioNode.getAttribute("transform"));
Raster raster = reader.readRaster(0, reader.getDefaultReadParam());
if (input != null) {
input.close();
}
reader.dispose();
return createJPEG4(raster, transform);
} catch (Exception e) {
// TODO Auto-generated catch block
log.error(e);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
log.error(e);
// LogWriter.log(file.getPath());
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
return null;
}
return null;
}
/**
*
* Java's ImageIO can't process 4-component images
*
* and Java2D can't apply AffineTransformOp either,
*
* so convert raster data to RGB.
*
* Technique due to MArk Stephens.
*
* Free for any use.
*
*/
private static BufferedImage createJPEG4(Raster raster, int xform) {
try {
int w = raster.getWidth();
int h = raster.getHeight();
byte[] rgb = new byte[w * h * 3];
// if (Adobe_APP14 and transform==2) then YCCK else
// CMYK
if (xform == 2) { // YCCK --
// Adobe
float[] Y = raster.getSamples(0, 0, w, h, 0, (float[]) null);
float[] Cb = raster.getSamples(0, 0, w, h, 1, (float[]) null);
float[] Cr = raster.getSamples(0, 0, w, h, 2, (float[]) null);
float[] K = raster.getSamples(0, 0, w, h, 3, (float[]) null);
for (int i = 0, imax = Y.length, base = 0; i < imax; i++, base += 3) {
float k = 220 - K[i], y = 255 - Y[i], cb = 255 - Cb[i], cr = 255 - Cr[i];
double val = y + 1.402 * (cr - 128) - k;
val = (val - 128) * .65f + 128;
rgb[base] = val < 0.0 ? (byte) 0
: val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);
val = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128) - k;
val = (val - 128) * .65f + 128;
rgb[base + 1] = val < 0.0 ? (byte) 0
: val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);
val = y + 1.772 * (cb - 128) - k;
val = (val - 128) * .65f + 128;
rgb[base + 2] = val < 0.0 ? (byte) 0
: val > 255.0 ? (byte) 0xff : (byte) (val + 0.5);
}
} else {
// assert xform==0: xform;
// CMYK
int[] C = raster.getSamples(0, 0, w, h, 0, (int[]) null);
int[] M = raster.getSamples(0, 0, w, h, 1, (int[]) null);
int[] Y = raster.getSamples(0, 0, w, h, 2, (int[]) null);
int[] K = raster.getSamples(0, 0, w, h, 3, (int[]) null);
for (int i = 0, imax = C.length, base = 0; i < imax; i++, base += 3) {
int c = 255 - C[i];
int m = 255 - M[i];
int y = 255 - Y[i];
int k = 255 - K[i];
float kk = k / 255f;
rgb[base] = (byte) (255 - Math.min(255f, c * kk + k));
rgb[base + 1] = (byte) (255 - Math.min(255f, m * kk + k));
rgb[base + 2] = (byte) (255 - Math.min(255f, y * kk + k));
}
}
// from other image types we know InterleavedRaster's can be
// manipulated by AffineTransformOp, so create one of those.
raster = Raster.createInterleavedRaster(new DataBufferByte(rgb,
rgb.length), w, h, w * 3, 3, new int[]{0, 1, 2}, null);
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorModel cm = new ComponentColorModel(cs, false, true,
Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
return new BufferedImage(cm, (WritableRaster) raster, true, null);
} catch (Exception e) {
// TODO Auto-generated catch block
log.error(e);
return null;
}
}
java cmyk转rgb_图片 CMYK转RGB 代码相关推荐
- Android 将一张CMYK模式的图片转换成RGB模式的图片
Android系统是不能够显示打印模式(CMYK)的图片的.所以要在Andorid设备下显示CMYK模式的图片我得做法是将其转换成RGB模式的图片,但是通过转换颜色丢失比较大,如果大家有好的办法欢迎指 ...
- php生成cmyk图片,用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!...
各位好!我在php里用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!比如:在ImageMagick通过ImagickPixel设置的颜色为cmyk(0,0 ...
- Java字符拼成图片
Java字符图片 背景 源码 代码思路 难点讲解 如何得到rgb 如何让不同颜色匹配不同字符 为什么我的图片只能打一半 OutOfMemoryError错误 为什么用汉字来打印图案会扭曲 装逼时刻 背 ...
- Java调用opencv实现图片去水印
opencv实现图片去水印案例 Java调用opencv实现图片去水印 环境安装配置 IDEA下开发配置 测试案例 Java调用opencv实现图片去水印 最近项目中遇到个需求,图片去水印下载,由于上 ...
- java BASE64流 输出图片。
java BASE64流 输出图片. 亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net ...
- JAVA 通过url下载图片保存到本地(亲测)
//java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { ...
- java主界面设置背景图片_java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改)...
java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改) 关注:223 答案:4 mip版 解决时间 2021-01-26 22:09 提问者非莪莫属 2021-01 ...
- java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量
转载自 java 程序实现对图片的压缩生成缩略图并可设定长宽.尺寸压缩率.图片质量 之前是在另一位高手的上传内容中学习到的,并将其代码根据我的需求进行了修改,参考位置:http://jiangpin ...
- java爬取单张图片
我们经常需要在网页上获取一些图片,有的图片我们是可以直接下载使用,有的图片需要我们登陆账号甚至付费下载,所以在此我写了一个使用Java爬取任意网页单张图片的爬虫. 代码解析 1.图片的网络位置 2.进 ...
- java使用itext将图片放到pdf模板的指定位置
java使用itext将图片放到pdf模板的指定位置 前面的准备步骤可以参考我的上一篇文章 这里直接上代码 这里用的图片是路径的形式,还有种情况是图片是base64的时候,这种情况就需要转一下图片格式 ...
最新文章
- MyBatis逆向工程:根据table生成Model、Mapper、Mapper.xml
- Spring Boot——集成七牛云OSS对象存储SDK解决方案
- 实现Linux系统外部和容器内部的文件传输
- 安卓开发 登录用户信息缓存_在Linux上使用finger命令查询登录用户信息
- UIScrollView相关问题(计算分页)
- spring boot—自定义logback日志配置
- 20181030-4 每周例行报告
- 差分进化算法(Differential Evolution)概述
- 索引越界异常Exception java.lang.IndexOutOfBoundsException
- linux yassl 漏洞修复,漏洞加固方案.docx
- php 公众号多图文消息,微信公众号怎么发布号多图文消息?微信公众号发布号多图文消息的方法...
- EXcel用法——如何冻结前两行,如何删除筛选的行
- linux怎样编写脚本文档,Linux下批处理文件编写
- 马路上“低头族”的交通隐患 ,小心埋头苦干的恶果
- (十六)Hibernate中的延迟加载
- 初探 MacBook Pro 刘海屏
- 计算机选择位置不能选桌面,win7电脑桌面的图标无法拖动位置了怎么办?
- APEX 出现DXGI_ERROR DEVICE
- idea安装SVN插件并使用
- 下列适合作为服务器操作系统的是,江苏专转本计算机真题 含答案