//大部分情况都转换没问题,有极个别的转换不成功。现在想,是不是调用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 代码相关推荐

  1. Android 将一张CMYK模式的图片转换成RGB模式的图片

    Android系统是不能够显示打印模式(CMYK)的图片的.所以要在Andorid设备下显示CMYK模式的图片我得做法是将其转换成RGB模式的图片,但是通过转换颜色丢失比较大,如果大家有好的办法欢迎指 ...

  2. php生成cmyk图片,用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!...

    各位好!我在php里用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!比如:在ImageMagick通过ImagickPixel设置的颜色为cmyk(0,0 ...

  3. Java字符拼成图片

    Java字符图片 背景 源码 代码思路 难点讲解 如何得到rgb 如何让不同颜色匹配不同字符 为什么我的图片只能打一半 OutOfMemoryError错误 为什么用汉字来打印图案会扭曲 装逼时刻 背 ...

  4. Java调用opencv实现图片去水印

    opencv实现图片去水印案例 Java调用opencv实现图片去水印 环境安装配置 IDEA下开发配置 测试案例 Java调用opencv实现图片去水印 最近项目中遇到个需求,图片去水印下载,由于上 ...

  5. java BASE64流 输出图片。

    java BASE64流 输出图片. 亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net ...

  6. JAVA 通过url下载图片保存到本地(亲测)

    //java 通过url下载图片保存到本地    public static void download(String urlString, int i) throws Exception {     ...

  7. java主界面设置背景图片_java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改)...

    java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改) 关注:223  答案:4  mip版 解决时间 2021-01-26 22:09 提问者非莪莫属 2021-01 ...

  8. java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量

    转载自  java 程序实现对图片的压缩生成缩略图并可设定长宽.尺寸压缩率.图片质量 之前是在另一位高手的上传内容中学习到的,并将其代码根据我的需求进行了修改,参考位置:http://jiangpin ...

  9. java爬取单张图片

    我们经常需要在网页上获取一些图片,有的图片我们是可以直接下载使用,有的图片需要我们登陆账号甚至付费下载,所以在此我写了一个使用Java爬取任意网页单张图片的爬虫. 代码解析 1.图片的网络位置 2.进 ...

  10. java使用itext将图片放到pdf模板的指定位置

    java使用itext将图片放到pdf模板的指定位置 前面的准备步骤可以参考我的上一篇文章 这里直接上代码 这里用的图片是路径的形式,还有种情况是图片是base64的时候,这种情况就需要转一下图片格式 ...

最新文章

  1. MyBatis逆向工程:根据table生成Model、Mapper、Mapper.xml
  2. Spring Boot——集成七牛云OSS对象存储SDK解决方案
  3. 实现Linux系统外部和容器内部的文件传输
  4. 安卓开发 登录用户信息缓存_在Linux上使用finger命令查询登录用户信息
  5. UIScrollView相关问题(计算分页)
  6. spring boot—自定义logback日志配置
  7. 20181030-4 每周例行报告
  8. 差分进化算法(Differential Evolution)概述
  9. 索引越界异常Exception java.lang.IndexOutOfBoundsException
  10. linux yassl 漏洞修复,漏洞加固方案.docx
  11. php 公众号多图文消息,微信公众号怎么发布号多图文消息?微信公众号发布号多图文消息的方法...
  12. EXcel用法——如何冻结前两行,如何删除筛选的行
  13. linux怎样编写脚本文档,Linux下批处理文件编写
  14. 马路上“低头族”的交通隐患 ,小心埋头苦干的恶果
  15. (十六)Hibernate中的延迟加载
  16. 初探 MacBook Pro 刘海屏
  17. 计算机选择位置不能选桌面,win7电脑桌面的图标无法拖动位置了怎么办?
  18. APEX 出现DXGI_ERROR DEVICE
  19. idea安装SVN插件并使用
  20. 下列适合作为服务器操作系统的是,江苏专转本计算机真题 含答案

热门文章

  1. 加权平均数的例子_加权平均数定义和实例
  2. 微信公众号点击图片跳转关注
  3. UWP 全屏与退出全屏
  4. 最近抖音超火的60帧高清视频制作教程
  5. C#几行代码让电脑蓝屏
  6. 寻找生态位置,中小险企破局生态建设——保险生态建设...
  7. UVA 473-Raucous Rockers(DP)
  8. 5wpa_supplicant程序 --详解
  9. #NOIP模拟赛#捕鼠器mousetrap(树)
  10. 【Heydrones】飞手百科第一篇:一定要看的无人机原理总结