文档章节

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

lindeyi
 lindeyi
发布于 2016/12/12 15:59
字数 414
阅读 351
收藏 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);  
	    }  
	  

 

本文转载自:http://dsmart-30buy.iteye.com/blog/1226969

共有 人打赏支持
lindeyi
粉丝 5
博文 16
码字总数 14150
作品 0
海淀
私信 提问
ImageIO.read()

image1=ImageIO.read(new File("./bomb_1.gif")); image2=ImageIO.read(new File("./bomb_2.gif")); image3=ImageIO.read(new File("./bomb_3.gif")); 加入这几句话后程序抛异常,javax.ima......

rainbow2015
2015/11/23
489
1
java[JDK1.6]怎样处理CYMK类型的图片

情况场景:用户会上传自己的图片,系统会验证此图片的宽和高是否符合要求,但是用户上传的图片 经过PS处理(ps后保存的模式是CMYK,而非RGB)此时,java中ImageIO.read(img) img是用户上传的...

花花人
2014/04/10
168
0
dcm4che 转JPG图片遇到问题

@追梦的南瓜 你好,想跟你请教个问题: 你看了你的dcm4che 转JPG图片得文章,但是我安装了32位jdk1.7和jai_imageio-1_0_01 但是还是一直报错,错误如下,javax.imageio.IIOException: Unsup...

ruiwu
05/18
126
1
java ImageIO.read 一旦图片为cmyk就报错,求大神告知好的处理方法?

读取图片的时候,一旦图片为cmyk就报错Unsupported Image Type,这个要怎么处理?有没好的处理方法,网上说的一些方法会导致颜色出问题,求不丢颜色的方法!

equck
2017/08/14
122
1
ImageIO.read -> Error reading PNG image data

package imgIOTest; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputS......

super-d2
2014/10/14
3K
1

没有更多内容

加载失败,请刷新页面

加载更多

docker搞个wordpress

1.先把wordpress的镜像下载下来 docker pull wordpress 2.下载mysql docker pull mysql:lastest 3.启动mysql docker run --name blog -e root -d mysql:5.7 docker run --name some-mysql -e......

无极之岚
11分钟前
0
0
【宇润日常疯测-005】PHP 中的 clone 和 new 性能比较

clone和new本不应该放在一起比较,它们的作用是不同的。但可能有一些场景下,可以用clone也可以用new,那么这时候我们选哪个呢? 我编写了两个测试,第一个是声明一个空类,第二个是带构造方...

宇润
11分钟前
0
1
点击按钮弹出类似IOS 底部 dialog

implementation 'com.baoyz.actionsheet:library:1.1.7' 然后设置按钮点击监听,,调用下列代码即可 ActionSheet.createBuilder(this, getSupportFragmentManager()) ......

lanyu96
15分钟前
1
0
专访阿里云专有云马劲,一个理性的理想主义者

“我的故事都是和团队技术相关的,自己还真没有什么引人入胜的故事。”当马劲被问到能不能多分享些个人经历故事时他笑着说,我们就干脆怀着好奇聊了聊他和阿里云专有云一路走来的故事。 马劲...

阿里云官方博客
46分钟前
1
0
java环形缓冲区

import java.util.ArrayList;import java.util.List;/** * * 环形缓冲区<br/> * 一. 写数据:<br/> * 1. push: 当数据已写满时返回false,否则可以正常写入返回true<br/>......

whoisliang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部