java cmyk转rgb_Java实现把cmyk格式图片转换为RGB格式图片
这个代码是我在网上找的,可以运行。
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格式图片相关推荐
- 使用C++实现YUV格式图像与RGB格式图像之间相互转换
使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...
- java gif转jpg_Java gif图片转换为jpg格式
下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...
- java gif转jpg_Java gif图片转换为jpg格式|chu
下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...
- java gif jpg_Java gif图片转换为jpg格式
下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...
- JAVA实现bmp转换JPEG_Java gif图片转换为jpg格式
下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...
- ogv格式怎么转换为MP4格式
说的ogv格式,很多人可能不知道它是个什么格式,其实它是一种从网页上缓存下来的视频格式,是一种自由且开放的格式,可以纳入各式各样自由和开放原始码的编解码器,包含音效.视讯.文字(像字幕)的处理.那么, ...
- 将BMP 格式图片转换为 JPEG 格式【c语言】
源码链接: https://blog.csdn.net/qq_44394952/article/details/122587475?spm=1001.2014.3001.5502. 一.任务及目标 利 ...
- 如何批量将 bmp 格式图片转换为 png 格式
概要:bmp 格式是纹的操作系统当中非常常见的一种图片格式,这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,所以导致了它存在一个很大的缺点,那就是占用磁盘空间过大,那么我们怎么将 bmp 格式的 ...
- 【阅读器】caj格式及其转换为PDF格式
文章目录 caj格式及其转换为PDF格式 前言 阅读工具 CAJ格式转换PDF格式 caj格式及其转换为PDF格式 前言 CAJ?CAJ格式是什么鬼?看来还是博主才疏学浅呀,一百度才知道是中国知乎网上 ...
- 如何将csv格式文件转换为Json格式文件?
如何使用python将csv格式文件转换为Json格式文件? 文章目录 如何使用python将csv格式文件转换为Json格式文件? 前言 一.使用execl方式打开csv文档 二.python转换代 ...
最新文章
- 重载new、delete和强制类型转换运算符()
- Calendar使用方法
- macOS 跳过非 AppStore 下载的软件打开时的验证步骤
- matlab keras,基于预训练的 Keras 层组合网络
- Android中使用FragmentManager获得控件
- 如何在 Mac 上轻松编辑、批注、签名和标记 PDF?
- Atitit.分布式远程调用 rpc rmi CORBA的关系
- javascript 原型链实现继承简单例子
- 无人驾驶智能车竞速赛,智能大会无人驾驶比赛
- 管理信息系统重要知识点整理
- RedHat8.4系统安装docker
- 如何在UltraCompare中编辑文件?
- 计算机英文缩写ISA,计算机中的英文缩写
- Web前端开发实训 -- 弹球王小游戏
- [CC2642r1] 问题笔记 记录使用过程中发现的问题
- 无线网络安全标准(转)
- oracle组合数据类型,oracle复合数据类型-ZT
- 录取麻省理工计算机博士全奖,你们要的麻省理工博士全奖录取来啦~~
- Python - 统计某一列不同项的重复次数 并新增一列赋值
- 苹果电脑macbookpro清理垃圾软件 mac系统免费清洁
热门文章
- 互联网日报 | 滴滴正式入局货运市场;苏宁小店宣布开放加盟;钉钉推出新职业在线学习平台...
- 霍尼韦尔扫描枪设置手动方法
- 亲民地理第39期-佛山(2)南风古灶
- 国庆节未休假的你,领到了三倍的工资吗?
- 天正的计算机快捷命令大全,天正建筑快捷键大全:天正建筑cad快捷键命令大全...
- 总结:KPCB中国合伙人周炜
- 罗马数字转换python_罗马数字转整数 python
- ftp服务器的端口20和21的具体作用,ftp端口号20和21的区别
- 小说app开发—小说app搭建需要注意什么问题?
- Raucous Rockers