ImageIO处理图片时Unsupported Image Type

异常代码

    BufferedImage bi = ImageIO.read(inputStream);

异常信息

javax.imageio.IIOException: Unsupported Image Type
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1068)
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1039)
        at javax.imageio.ImageIO.read(ImageIO.java:1448)
        at javax.imageio.ImageIO.read(ImageIO.java:1352)

异常原因

ps或其他软件处理过的图片保存为jpg格式时,默认的模式是CMYK模式(这是给印刷机用的)。

解决方案

方案一

从图片本身着手,使用相关软件将其渲染格式改为RGB格式。

方案二

从代码角度进行修改,对图片解码和解码工具进行修改,使用:twelvemonkeys。

在maven依赖中导入相应jar包即可,一般情况下不需要在代码上进行修改。

<dependency>
    <groupId>com.twelvemonkeys.imageio</groupId>
    <artifactId>imageio-jpeg</artifactId>
    <version>3.3.2</version>
</dependency>

附一: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 的插件和扩展的集合。

这些插件使用 javax. imageio 包扩展了 Java 中支持的图像文件格式的数量。此项目的主要目的是为 JRE 本身不包括的格式提供支持。

对格式的支持非常重要, 既可以读取 “野外” 中的数据, 也可以保持对旧式格式数据的访问。由于存在大量的遗留数据, 我们认为需要对流行格式的读者开放实现。目标是创建一套高效、健壮的 ImageIO插件, 可以独立分布。

官网详情:https://haraldk.github.io/TwelveMonkeys/

附二: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

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

    C = 100 - R * 100 / 255
    M = 100 - G * 100 / 255
    Y = 100 - B * 100 / 255

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
javax.imageio.iioexception: unsupported image type是Java图像输入输出异常的一种,表示不支持或不识别的图像类型。 在Java中,javax.imageio包提供了许多用于读取、写入和操作图像的类和接口。当使用该包中的类进行图像操作,如果遇到不支持或不识别的图像类型,就会抛出javax.imageio.iioexception: unsupported image type异常。 造成这个异常的原因可能有以下几种情况: 1. 图片格式不受支持:Java的图像处理库支持许多常见的图片格式,如JPEG、PNG、GIF等。如果使用的图片格式不在支持列表中,就会抛出该异常。 2. 图片文件内容损坏:有候由于网络传输、存储介质损坏或其他原因,图片文件的内容会发生损坏。如果图片文件的内容损坏,读取就会抛出该异常。 3. 图片文件扩展名错误:某些情况下,Java的图像处理库根据文件的扩展名猜测图片的格式。如果文件扩展名与实际图片格式不匹配,也会导致该异常的发生。 解决javax.imageio.iioexception: unsupported image type异常的方法有: 1. 使用支持的格式:确认所处理图片格式是Java图像处理库支持的,如果不是,则需将其转换为支持的格式再进行处理。 2. 检查图片文件:检查图片文件是否存在并且没有损坏。可以尝试打开图片文件并查看是否能正常显示。 3. 确认文件扩展名:确保文件的扩展名与实际的图片格式匹配。在加载图片,可以指定图片的格式,而不依赖于文件扩展名。 总之,javax.imageio.iioexception: unsupported image type异常通常是由不支持或不识别的图像类型引起的。通过检查图片格式、文件内容和文件扩展名等方面的问题,可以解决该异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值