文档章节

ImageIO.read 方法报javax.imageio.IIOException: Unsupported Image Type

lindeyi
 lindeyi
发布于 2016/12/12 15:59
字数 414
阅读 5.8K
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

java在对图片处理时,使用ImageIO.read方法有时报javax.imageio.IIOException: Unsupported Image Type错,上网查发现是图片类型的问题,图片不是RGB 格式而是CMYK格式,网上说图片在进过ps软件处理后,默认是CMYK格式的。网上好多使用代码转换的程序有问题,最后看到一篇文章说http://dsmart-30buy.iteye.com/blog/1226969

找到解决方法:

 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);//CMYK    
	            image = 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);  
	    }  
	  

 

lindeyi
粉丝 6
博文 16
码字总数 14150
作品 0
海淀
私信 提问
加载中
请先登录后再评论。
Html2Image

Html2Image 是一个 Java 类库,可将 HTML 存为 GIFPNG 和 JPG 图像,并通过 <map> 元素让该图片可点击。 示例代码: HtmlImageGenerator imageGenerator = new HtmlImageGenerator(); imageG......

匿名
2012/10/21
1.1W
2
磁盘映像文件操作工具--vidma

vidma 是一个用来操作虚拟磁盘映像文件的工具,可显示映像文件的基本信息并可重新更改大小。当前支持的格式只有 VDI (Virtual Disk Image) ,该格式主要用于 VirtualBox....

匿名
2013/01/03
797
0
代码生成的底层应用框架--fastCSharp

fastCSharp是一个基于.NET元数据的代码生成的底层应用框架,目标是打造一个“开发+运行”效率双优的开源框架。 经过半年多的时间,除了与web开发直接相关的部分,都已经在fastCSharp part 1...

fastCSharp
2013/05/29
3.8K
0
jquery对象/标签映射扩展--NickName

jquery对象/标签映射扩展-NickName OTM是什么 以往把这样的一个json对象 var data = {}; data.UserId = "8888"; data.UserName = "赵六"; data.School="湖北工业大学"; data.schoolNo=100002......

知鸣
2013/06/13
1K
0
用AGG实现高质量图形输出(一)

AGG是一个开源、高效的跨平台2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高 (自称超过GDI+) 使用前AGG的准备工作 下载AGG库,它的...

Waiting4you
2009/08/24
2.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

创建myBatis项目

1、简介 1.1、核心组件 SqlSessionFactoryBuilder(构造器):根据配置信息或者代码生成SqlSessionFactory SqlSessionFactory(工厂接口):依靠工厂来生成SqlSession(会话) SqlSession(会话): ...

执键走天涯
15分钟前
0
0
Tomcat集群带来的问题和解决思路

Tomcat集群 存在问题 解决方案 基于Redis+Cookie+Jackson+Filter的原生解决集群Session共享问题 使用Spring Session零侵入解决Session共享 单点登录实现 Redis构建Session服务器 使用Redis+C...

code-ortaerc
35分钟前
17
0
小福利

点击有福利 本文分享自微信公众号 - V5codings(gh_c1ec2d16ec93)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

V5codings
2019/11/19
0
0
ubuntu 安装 oh my zsh

https://github.com/ohmyzsh/ohmyzsh https://ohmyz.sh/#install 安装 sudo apt-get install zsh -ysh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh ......

阿豪boy
47分钟前
7
0
自然语言处理中的语言模型简介

作者|Devyanshu Shukla 编译|Flin 来源|medium 在这篇文章中,我们将讨论关于语言模型(LM)的所有内容 什么是LM LM的应用 如何生成LM LM的评估 介绍 NLP中的语言模型是计算句子(单词序列)...

人工智能遇见磐创
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部