文档章节

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

lindeyi
 lindeyi
发布于 2016/12/12 15:59
字数 414
阅读 160
收藏 0
点赞 0
评论 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
粉丝 3
博文 14
码字总数 13536
作品 0
海淀
java[JDK1.6]怎样处理CYMK类型的图片

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

花花人 ⋅ 2014/04/10 ⋅ 0

dcm4che 转JPG图片遇到问题

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

ruiwu ⋅ 05/18 ⋅ 0

java获取oracle数据库blob图片字节流显示到jsp页面出错bogus marker length

最近在做项目时需要从oracle读取blob图片列表,显示到jsp页面上。使用以下代码实现,大部分图片显示正常,但是有些图片执行BufferedImage bis = ImageIO.read(is);会报错。求高手指教,这个问...

陈裕春 ⋅ 2013/11/06 ⋅ 2

java上传png图片出现红色背景

java图片上传出现红色背景 java图片服务器上传图片都很正常,唯独上传png图片时,png图片变成红色背景 原因是读取上传数据时用的是ImageIO.read(inputstream)方法 解决办法是:换成jdk中的T...

livend ⋅ 2016/08/26 ⋅ 0

java 图片处理

1.读取图片 File f = new File(“c:imagesmyimage.gif”); BufferedImage bi = ImageIO.read(f); 2.写图片 BufferedImage im = new BufferedImage(0, 0, BufferedImage. TYPEINTRGB); Image......

Canaan_ ⋅ 2016/08/12 ⋅ 0

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 ⋅ 1

java 照片处理的工具类

/** @Title: ImageUtils.java @Package com.photo.utils @Description: TODO(用一句话描述该文件做什么) @author zhougui @date 2015年5月20日 下午7:08:41 @version V1.0 */ package com.ph......

一念三千 ⋅ 2015/05/21 ⋅ 0

给图片添加水印,生成缩略图,图片透明等

package com.dengyang.utils; /** * @author : dengyang * Date: 12-9-20 * Time: 下午4:48. / import java.io.IOException; import java.awt.Graphics; import java.awt.; import java.awt......

洋哥6 ⋅ 2012/09/20 ⋅ 0

java用内部类实现对图片的处理,缩放,添加水印,裁切

前段时间在这里请教了一个关于怎么进行图片压缩的问题,后来又上网专门查了一下,结合网上写的资料,自己整理一下,现在发上来,送给所有有需要的人,代码如下, 这是引入的类 import java....

四月李 ⋅ 2013/05/16 ⋅ 5

使用jquery jcrop插件进行图片的截取与保存

使用jquery jcrop插件进行图片的截取与保存 分类: web页面相关 2012-08-24 17:58106人阅读评论(0)收藏举报 第一步:上传大图片到服务器,并且展示到页面 第二部:调用jcrop组件js及css [ht...

张可庆 ⋅ 2012/10/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 29分钟前 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部