使用Java的ImageIO做一些图片处理的工作,突然今天有人反馈说我的程序无法处理jpg图片。我拿到图片进行调试,出现了如下报错:

javax.imageio.IIOException: Unsupported Image Type

at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Source)

at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)

at javax.imageio.ImageIO.read(Unknown Source)

at javax.imageio.ImageIO.read(Unknown Source)

at com.dancen.util.image.MyImageHelper.getBufferedImage(MyImageHelper.java:554)

也就是说,这个jpg图片被认为是不支持的图片类型,然而,程序却能够正常处理其它的jpg图片。

难道这个图片不是一张jpg图片?使用系统自带的图片浏览工具、使用浏览器都能正常显示该图片;而且该文件的文件头FFD8FF确实也表明这就是一张jpg图片。

问题原因:

Java的ImageIO万年不更新,已经跟不上时代,它不能处理CMYK色彩的图片。如果在PS等软件中导出CMYK颜色模式的图片,Java自带的ImageIO是不支持的。

解决办法:

TwelveMonkeys项目:https://github.com/haraldk/TwelveMonkeys

TwelveMonkeys ImageIO is a collection of plugins and extensions for Java's ImageIO.

These plugins extends the number of image file formats supported in Java, using the javax.imageio.* package. The main purpose of this project is to provide support for formats not covered by the JRE itself.

Support for formats is important, both to be able to read data found "in the wild", as well as to maintain access to data in legacy formats. Because there is lots of legacy data out there, we see the need for open implementations of readers for popular formats. The goal is to create a set of efficient and robust ImageIO plug-ins, that can be distributed independently.

TwelveMonkeys ImageIO是Java ImageIO的扩展,在使用上非常方便,直接导入相关的jar包依赖即可,不需要在原有代码上进行修改,代码上层依然使用的是Java的ImageIO。

附:RGB色彩和CMYK色彩的区别和换算

RGB色彩

自然界中绝大部分的可见光谱可以用红、绿和蓝三色光按不同比例和强度的混合来表示。RGB分别代表着3种颜色:R代表红色,G代表绿色、B代表蓝色。RGB模型也称为加色模型,通常用于光照、视频和屏幕图像编辑。RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。

CMYK色彩

CMYK色彩模式以打印油墨在纸张上的光线吸收特性为基础,图像中每个像素都是由靛青(C)、品红(M)、黄(Y)和黑(K)色按照不同的比例合成。每个像素的每种印刷油墨会被分配一个百分比值,最亮(高光)的颜色分配较低的印刷油墨颜色百分比值,较暗(暗调)的颜色分配较高的百分比值。

CMYK转RGB的换算方法

R = 255*(100-C)*(100-K)/10000

G = 255*(100-M)*(100-K)/10000

B = 255*(100-Y)*(100-K)/10000

1

2

3

RGB转CMYK的换算方法

这个转换理论上是不存在的,主要是因为K值的存在。当k=0时的公式为:

C = 100 - R * 100 / 255

M = 100 - G * 100 / 255

Y = 100 - B * 100 / 255

Java 读取jpeg图片 Unsupported Image Type 异常相关推荐

  1. javax.imageio.IIOException: Unsupported Image Type异常,解决方法

    javax.imageio.IIOException: Unsupported Image Type异常 可以采用如下方案: public class ImagesUtils {public stat ...

  2. 使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常

    使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常 参考文章: (1)使用CGlib出现java.lang.NoClas ...

  3. java读取本地图片及路径

    手贱打算用java读取本地图片,发现各种问题,之前使用python,发现还是python太厉害 如果打算用文件的形式读取图片,注意要对文件流做异常处理,还有java的输出语句,连接符之间的关系.最后成 ...

  4. 使用javax.imageio.ImageIO读取JPEG图片时出现异常java.awt.color.CMMException: General CMM error517

    目录 问题描述 背景 异常 解决 重现 紧急处理 解决方法 第一种:变更JDK版本 第二种:去掉引入的twelvemonkeys图片读取插件 问题描述 背景 由于业务需要,生产环境需要将用户上传的图片 ...

  5. 图片压缩Unsupported Image Type异常,解决方法

    问题 需要对上传的大图片,在存储原文件后,另对它进行压缩存储作为缩略图.部分jpg图片在压缩时报错,导致没有压缩直接保存.网站页面展示这些5M左右的图片,打开变慢,影响使用 javax.imageio ...

  6. java 读取数据库图片二进制流并输出到jsp页面

    最近刚好遇到这个问题,刚开始在网上各种搜索,看到大量有关该问题的博文. 大量文章有些不敢苟同,希望博主们要写就认真写,请不要浪费其他需要帮助的人的时间去验证你的博文是否正确. 正文如下: 流程说明: ...

  7. w806开发板驱动ov2640读取jpeg图片1600x1200分辨率,以及花屏原因及解决办法

    主频需要160MHz以上,80MHz主频读取会丢数据,读取过程中要关闭所有中断否则会出现丢数据花屏现象,还有一个重要的地方需要注意,PCLK速度过慢同时照片信息量多时,jpeg文件过大也会花一部分,像 ...

  8. JAVA读取本地图片并展示

    代码如下: //读取本地图片输入流 FileInputStream inStream = new FileInputStream("D:/image/123.jpg");//byt ...

  9. java读取tif图片_java读取tiff格式图片信息的方式。

    java读取tiff图片信息,其实也挺简单的,用xmpcore.jar可以解析. File jpegFile = new File("D:\\1.tif"); Metadata m ...

  10. java读取服务器图片大小,SpringMVC中MultipartFile上传获取图片的宽度和高度详解

    SpringMVC一般使用MultipartFile来做文件的上传,通过MultipartFile的getContentType()方法判定文件的类型(MIME) ".doc":& ...

最新文章

  1. 关于EXCEL超级链接被禁止的解决方法
  2. c语言50到100套,c语言51-100套试题答案及详解.pdf
  3. 【web安全】Web应用隔离防护之Web弱口令爆破
  4. VTK:可视化算法之ColorIsosurface
  5. Java黑皮书课后题第6章:**6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几
  6. Astar2012 总结
  7. Java 7中对String.substring的更改
  8. 电子学会Python(二至五级)
  9. 计算机科学美国大学专业,美国大学Computer Science 计算机科学专业排名(转)...
  10. 【计算机网络】IPv4 NAT
  11. vs2017使用GitHub插件发布项目到github
  12. SSM框架原理,作用及使用方法,详细解释
  13. 学生课堂随机点名系统小结
  14. 综合布线系统技术是建设智慧城市的血脉
  15. 打开matlab窗口,不小心关闭了matlab的命令窗口怎么再打开?谢谢,十分急
  16. Deepin 与 Win10 双系统 Deepin无法启动且没有引导项问题
  17. Springboot RabbitMQ
  18. 参考文献格式要求及书写规则
  19. java如何重写onestring,44 java toString 方法 重写equals 方法
  20. WNMP(windows+nginx+mysql+php)环境搭建

热门文章

  1. 第62次上IM课(IMO71:How to use Adverb)
  2. C语言入门:查找子串
  3. python相关性分析及可视化
  4. python实现图像格式转换(bmp、jpg、png)
  5. python字典第一个元素_如何获取python字典中的第一个值
  6. 用spark统计50年美国最常见的20个名字
  7. 交换机设备登录账号权限1_h3c交换机设置用户权限
  8. 电子纸BUSY引脚不同状态下说明(大连佳显)
  9. java 图片实现毛玻璃_iOS毛玻璃效果的实现及图片模糊效果的三种方法
  10. java基础之String类型