java下cmyk图片读取和转换rgb,以及图片压缩
首先感谢
https://www.cnblogs.com/interdrp/p/7076202.html
https://blog.csdn.net/ybn187/article/details/52185269
https://blog.csdn.net/keketrtr/article/details/88129641。
package test;import com.joyhua.utils.CMYKUtil;
import com.joyhua.utils.CMYKUtil1;
import net.coobird.thumbnailator.Thumbnails;import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;public class test4 {public static void main(String[] args) {String sourceString = "E:\\test\\p1.jpg";File source = new File(sourceString);String toString = "E:\\test\\p1_rgb.jpg";File to = new File(toString);String toString1 = "E:\\test\\p1_s.jpg";File to1 = new File(toString);try {Thumbnails.of(CMYKUtil.readImage(source)).width(500).height(704).outputFormat("jpg").toFile(to1);//图片是cmyk,需要转换为rgb// Thumbnails.of(source).width(500).height(704).outputFormat("jpg").toFile(to);} catch (IOException e) {e.printStackTrace();}}
}
package com.joyhua.utils;import org.apache.log4j.Logger;import javax.imageio.IIOException;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.color.ColorSpace;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;/*** CREATE BY zz ON 2019-03-26**/
public class CMYKUtil {static Logger log = Logger.getLogger(CMYKUtil.class);/*** @description: CMYK格式图片转RGB格式图片的处理,因为Thumbnails无法处理CMYK格式图片*/public static BufferedImage readImage(File file) throws IOException {return readImage(ImageIO.createImageInputStream(file));}public static BufferedImage readImage(InputStream stream) throws IOException {return readImage(ImageIO.createImageInputStream(stream));}public static BufferedImage readImage(ImageInputStream input) throws IOException {Iterator<?> readers = ImageIO.getImageReaders(input);if (readers == null || !readers.hasNext()) {return null;}ImageReader reader = (ImageReader) readers.next();reader.setInput(input);BufferedImage image;try {// 尝试读取图片 (包括颜色的转换).image = reader.read(0); //RGB} catch (IIOException e) {// 读取Raster (没有颜色的转换).Raster raster = reader.readRaster(0, null);//CMYKimage = createJPEG4(raster);}return image;}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);}
}
转换完后会发现图片颜色不对了,需要引入一下三个maven
<dependency><groupId>com.twelvemonkeys.imageio</groupId><artifactId>imageio-jpeg</artifactId><version>3.5</version></dependency><dependency><groupId>com.twelvemonkeys.imageio</groupId><artifactId>imageio-tiff</artifactId><version>3.5</version></dependency><dependency><groupId>com.twelvemonkeys.servlet</groupId><artifactId>servlet</artifactId><version>3.5</version></dependency>
jdk的ImageIO有自动发现功能,会自动查找相关的编解码类并使用,而不使用jdk默认的编解码类,所以使用这个库是完全无入侵的。
java下cmyk图片读取和转换rgb,以及图片压缩相关推荐
- java下cmyk图片读取和转换rgb
记录一下整个过程 第一次采用的办法 public static String readImage(String filename) throws IOException { File file = n ...
- java下字符串和字节数组转换
原文章地址: java下字符串和字节数组转换 http://blog.sina.com.cn/s/blog_7e8c7d560101lwta.html 1.字节数组转换为字符串 byte[] byBu ...
- [史上最全]16bit RAW图片读取、转换、裁切、保存
最近在处理图像时,发现需要对16bitRAW格式图片进行读取格式转换与裁切,在尝试多种方式之下,发现一种简单的方法,只要几行代码就可以搞定!!! 实现只需两个基本库,能够实现16位图片的无损转换,转换 ...
- java 图片文件 格式转换_Java的图片文件格式转换和线性缩放
Java的图片文件格式转换和线性缩放 来源:68design.net 2007年07月13日 08:31 图片文件格式转换最核心的问题就是要解决各种图片格式的编码和解码,推荐用jimi包,可从 htt ...
- java下拉框读取数据库数据_下拉框读取数据库数据库
一起谈.NET技术,Visual Studio 2008单元测试_数据库测试 我们开发一个系统必须与数据库打交道,需要写N个SQL.存储过程.自定义函数.视图等,那么能否使用Visual Studio ...
- java下拉框读取数据库数据_在一个jsp页面实现二级下拉框联动,实时读取数据库数据...
在一个jsp(SUN企业级应用的首选)页面实现二级下拉框联动,实时读取数据库数据,这个方法非常使用,只需要修改很小的地方就可以使用.设计的文件,serch.jsp(SUN企业级应用的首选),main. ...
- java下 dec hex byte数组转换
十进制字符串转十六进制: public static String stringToHexString(String strPart) { String hexString = &qu ...
- wpf嵌入资源html,WPF 嵌入的资源的图片读取与转换
public static System.Drawing.Bitmap GetPngFromResources(string pngName) { //www.worlduc.com/blog2012 ...
- 图片读取器和皮肤库设计
图片读取器和皮肤库设计 无论是图片读取器还是皮肤库设计,其实只是点到为止,没有深入做出很好的视觉效果,请见谅. 一.实验目的 1.结合实例,熟练分析并绘制UML类图: 2.熟练使用java实现两种常见 ...
- PDF怎样转换成JPG图片 PDF转换为JPG图片教程
随着网络技术的飞速发展和网络的普及,互联网多方位的渗透我们的生活.一些论坛网站上面,PDF高质量的帖子异彩纷呈,吸引着大家的目光.如果我们需要某个PDF文件转换成图片时,那么,PDF怎么转换成JPG图 ...
最新文章
- mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询...
- [专业亲测]Ubuntu16.04安装Nvidia显卡驱动(cuda)--解决你的所有困惑【转】
- unbutu 按照docker
- java学习笔记(九)----多线程
- 数据保护伞—为MaxCompute平台数据安全保驾护航
- VS20“.NET研究”10自定义新建文件模版
- 自顶向下 计算机网络知识,计算机网络(自顶向下)第七版考试复习要点(第四章)...
- 游戏中基于物理的渲染(一)
- python循环结构代码_Python --- 程序的循环结构
- 云架构指挥调度平台技术方案建议书
- ubuntu下安装redis及在php中使用
- php中mysql数据库异步查询实现
- Presto常用命令:查看版本号
- android soundpool 封装,Android 音频播放之SoundPool的使用和封装
- stm32L1xx系列低功模式配置+STOP模式+RTC唤醒
- linux系统设置成中文语言
- MYSQL 索引 主键 外键
- 计算机为啥启用不了网络发现,Win7“网络发现”功能启用不了的原因和解决方法...
- MindSpore:自然语言处理(NLP)—分词技术
- 集赞免费领《新程序员》电子刊!
热门文章
- 中科院阿里云发布11比特云超导量子处理器
- Get-ChildItem参数之 -Exclude,Filter,Recurse应用
- WPS标题段前间距设置无效解决方案
- python识别图片手写文字_Python徒手实现识别手写数字—简易图片数据库
- php是世界上最好的语言吗
- python英文参考文献格式_英文参考文献的正确引用格式详解
- Openstack+Opencontrail安装与部署初级教程
- 十四、陈述句_句子结构成分
- 精准医学:循环肿瘤DNA在检测非小细胞肺癌患者体细胞突变及跟踪肿瘤进展中的作用|精准治疗
- 脑电伪迹降噪方法整理