这个代码是我在网上找的,可以运行。

package com.pb.util;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

import java.awt.Transparency;

import java.awt.color.ColorSpace;

import java.awt.image.BufferedImage;

import java.awt.image.ColorModel;

import java.awt.image.ComponentColorModel;

import java.awt.image.DataBuffer;

import java.awt.image.DataBufferByte;

import java.awt.image.Raster;

import java.awt.image.WritableRaster;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Iterator;

import javax.imageio.IIOException;

import javax.imageio.ImageIO;

import javax.imageio.ImageReader;

import javax.imageio.stream.ImageInputStream;

/**

* 把cmyk格式图片转换为RGB格式

* @author Administrator

*

*/

public class CMYK {

public void readImage(String filename) throws IOException {

File file = new File(filename);

ImageInputStream input = ImageIO.createImageInputStream(file);

Iterator readers = ImageIO.getImageReaders(input);

if(readers == null || !readers.hasNext()) {

throw new RuntimeException("1 No ImageReaders found");

}

ImageReader reader = (ImageReader) readers.next();

reader.setInput(input);

String format = reader.getFormatName() ;

BufferedImage image;

if ( "JPEG".equalsIgnoreCase(format) ||"JPG".equalsIgnoreCase(format) )   {

try {

// 尝试读取图片 (包括颜色的转换).

image = reader.read(0); //RGB

} catch (IIOException e) {

// 读取Raster (没有颜色的转换).

Raster raster = reader.readRaster(0, null);//CMYK

image = createJPEG4(raster);

}

image.getGraphics().drawImage(image, 0, 0, null);

//String newfilename = filename.substring(0,filename.lastIndexOf("."))+"_rgb"+filename.substring(filename.lastIndexOf("."));

String newfilename = filename;

File newFile = new File(newfilename);

FileOutputStream out = new FileOutputStream(newFile);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(image);

out.flush();

out.close();

}

}

private static BufferedImage createJPEG4(Raster raster) {

int w = raster.getWidth();

int h = raster.getHeight();

byte[] rgb = new byte[w * h * 3];

//彩色空间转换

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);

}

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);

}

//测试

public static void main(String[] args) throws IOException {

String filename = "d:/2015.jpg";

CMYK cm = new CMYK();

cm.readImage(filename);

}

}

java cmyk转rgb_Java实现把cmyk格式图片转换为RGB格式图片相关推荐

  1. 使用C++实现YUV格式图像与RGB格式图像之间相互转换

    使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...

  2. java gif转jpg_Java gif图片转换为jpg格式

    下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...

  3. java gif转jpg_Java gif图片转换为jpg格式|chu

    下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...

  4. java gif jpg_Java gif图片转换为jpg格式

    下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...

  5. JAVA实现bmp转换JPEG_Java gif图片转换为jpg格式

    下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...

  6. ogv格式怎么转换为MP4格式

    说的ogv格式,很多人可能不知道它是个什么格式,其实它是一种从网页上缓存下来的视频格式,是一种自由且开放的格式,可以纳入各式各样自由和开放原始码的编解码器,包含音效.视讯.文字(像字幕)的处理.那么, ...

  7. 将BMP 格式图片转换为 JPEG 格式【c语言】

    源码链接: https://blog.csdn.net/qq_44394952/article/details/122587475?spm=1001.2014.3001.5502. 一.任务及目标 利 ...

  8. 如何批量将 bmp 格式图片转换为 png 格式

    概要:bmp 格式是纹的操作系统当中非常常见的一种图片格式,这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,所以导致了它存在一个很大的缺点,那就是占用磁盘空间过大,那么我们怎么将 bmp 格式的 ...

  9. 【阅读器】caj格式及其转换为PDF格式

    文章目录 caj格式及其转换为PDF格式 前言 阅读工具 CAJ格式转换PDF格式 caj格式及其转换为PDF格式 前言 CAJ?CAJ格式是什么鬼?看来还是博主才疏学浅呀,一百度才知道是中国知乎网上 ...

  10. 如何将csv格式文件转换为Json格式文件?

    如何使用python将csv格式文件转换为Json格式文件? 文章目录 如何使用python将csv格式文件转换为Json格式文件? 前言 一.使用execl方式打开csv文档 二.python转换代 ...

最新文章

  1. 重载new、delete和强制类型转换运算符()
  2. Calendar使用方法
  3. macOS 跳过非 AppStore 下载的软件打开时的验证步骤
  4. matlab keras,基于预训练的 Keras 层组合网络
  5. Android中使用FragmentManager获得控件
  6. 如何在 Mac 上轻松编辑、批注、签名和标记 PDF?
  7. Atitit.分布式远程调用  rpc  rmi  CORBA的关系
  8. javascript 原型链实现继承简单例子
  9. 无人驾驶智能车竞速赛,智能大会无人驾驶比赛
  10. 管理信息系统重要知识点整理
  11. RedHat8.4系统安装docker
  12. 如何在UltraCompare中编辑文件?
  13. 计算机英文缩写ISA,计算机中的英文缩写
  14. Web前端开发实训 -- 弹球王小游戏
  15. [CC2642r1] 问题笔记 记录使用过程中发现的问题
  16. 无线网络安全标准(转)
  17. oracle组合数据类型,oracle复合数据类型-ZT
  18. 录取麻省理工计算机博士全奖,你们要的麻省理工博士全奖录取来啦~~
  19. Python - 统计某一列不同项的重复次数 并新增一列赋值
  20. 苹果电脑macbookpro清理垃圾软件 mac系统免费清洁

热门文章

  1. 互联网日报 | 滴滴正式入局货运市场;苏宁小店宣布开放加盟;钉钉推出新职业在线学习平台...
  2. 霍尼韦尔扫描枪设置手动方法
  3. 亲民地理第39期-佛山(2)南风古灶
  4. 国庆节未休假的你,领到了三倍的工资吗?
  5. 天正的计算机快捷命令大全,天正建筑快捷键大全:天正建筑cad快捷键命令大全...
  6. 总结:KPCB中国合伙人周炜
  7. 罗马数字转换python_罗马数字转整数 python
  8. ftp服务器的端口20和21的具体作用,ftp端口号20和21的区别
  9. 小说app开发—小说app搭建需要注意什么问题?
  10. Raucous Rockers