IllegalArgumentException:源栅格波段和源颜色空间组件的数量不匹配对于彩色图像异常

Sha*_*ita 13 java bufferedimage image-processing javax.imageio

有人建议的上述答案将我的彩色图像转换为黑白图像.所以这不适合我的问题.

File file = new File("path");          
BufferedImage bufferedImage = ImageIO.read( file );
Run Code Online (Sandbox Code Playgroud)

这是代码,下面是图像.下载图像并保存在您的电脑中.并尝试使用正确的path值运行上面的代码,它将在主题中引发异常

下载图片:https://skydrive.live.com/?cid = 19547371C4F3B839&id = 19547371C4F3B839%21105

简单地说,如果有人可以从图像中获取java.awt.image.BufferedImage对象,那就足够了(不应该将图像转换为灰度图像).

如果你能回答这个问题,你就是天才:D.Plz的帮助.

har*_*ldK 25

你的代码在这里没有任何问题.我可以使用我的ImageIO JPEGImageReader插件读取你的图像.此图像阅读器试图对JPEG错误宽容,并且比标准Java JPEGImageReader稍微强大.

但是,您的JPEG文件似乎有许多问题,因此无法100%读取:

  • 首先,图像中的ICC颜色配置文件有4个颜色分量,而图像数据只有3个颜色分量(这导致您看到的异常).根本原因可能是糟糕的转换软件.使用ExifTool或类似软件查看元数据以进行进一步调查.我的读者只会忽略ICC配置文件.
  • 其次,JPEG流过早结束(缺少EOI).您会注意到图像右下方有一些垃圾像素.除了获取原始图像之外,没有什么可以做的(实际上,图像包含缩略图,缩略图没有损坏;如果你真的需要,你可以尝试重新创建数据).从我的阅读器返回的图像与本机软件读取的图像一致.

  • 有关如何在java应用程序和servlet容器中使用插件的详细信息,请访问:https://github.com/haraldk/TwelveMonkeys (3认同)
  • Maven依赖关系:`<dependency> <groupId> com.twelvemonkeys.imageio </ groupId> <artifactId> imageio-jpeg </ artifactId> <version> 3.3.1 </ version> </ dependency>` (3认同)
  • @haraldK好的,我发现软件包`libimage-exiftool-perl`包含exiftool。因此,我有一个图像的颜色分量值为“ 3”,而颜色空间数据为“ CMYK”。IIRC,CMYK具有4个颜色分量,并且不匹配是导致异常的原因。那正确吗? (2认同)