java图片处理Unsupported Image Type解决

使用java读取JPEG报错Unsupported Image Type:

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)

一、异常解释
javax.imageio.IIOException: Unsupported Image Type异常一般情况是由于图片颜色模式是CMYK导致的,Java默认是没带CMYK格式读取的功能的,内部读取文件的类JPEGImageReader只能读取RGB color model

二、解决方案
使用TwelveMonkeys就可以解决了。
TwelveMonkeys的使用比较简单,只要把相关的jar包加入到类路径,他的类我们基本不会用到,只要使用jdk ImageIO或其上层的接口就行了。JDK的ImageIO有自动发现功能,会自动查找相关的编解码类并使用,而不使用jdk默认的编解码类。

引入新的maven依赖


<dependency>
    <groupId>com.twelvemonkeys.imageiogroupId>
    <artifactId>imageio-jpegartifactId>
    <version>3.6version>
dependency>

使用以下参考的方法均有颜色异常,读twelvemonkeys源码也是用的ICCProfiles进行转换,查到的一个工具类是FastCMYKToRGB,但是单独摘出来使用颜色还是有偏差。下面参考中convertCmykToRgb方法也是使用ICCProfiles进行转换,但是也是颜色异常,只有TwelveMonkeys的imageio-jpeg是最简答的方案,如有直接转换的可贴上代码一起讨论。

参考:
Java CMYK图片转RGB图片
TwelveMonkeys图片格式转换git地址
java下cmyk图片读取和转换rgb,以及图片压缩
Java 读取jpeg图片 Unsupported Image Type 异常
有颜色异常
Java读取图片 cmyk转rgb
java下cmyk图片读取和转换rgb
使用convertCmykToRgb方法颜色异常
Java读取图片 cmyk转rgb
Reading CMYK JPEG images with Java ImageIO

AdobeICCProfilesCS4Win_end-user.zip下载
为什么 ARGB 和 CMYK 之间来回转换会不断损失颜色

你可能感兴趣的:(java,开发语言)