【问题标题】:IllegalArgumentException: Numbers of source Raster bands and source color space components do not match For a color image ExceptionIllegalArgumentException:源光栅波段和源颜色空间分量的数量不匹配对于彩色图像异常
【发布时间】:2013-08-23 11:31:21
【问题描述】:

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

File file = new File("path");          
BufferedImage bufferedImage = ImageIO.read( file );

这是代码,下面是图像。下载图像并保存在您的电脑中。并尝试以正确的路径值运行上述代码,它会在主题中抛出异常

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

只要有人可以从图像中获取 java.awt.image.BufferedImage 对象就足够了(不应该将图像转换为灰度图像)。

如果你能回答这个问题,你就是天才 :D。请帮忙。

【问题讨论】:

  • 嗨,菲利普,请仔细阅读我的问题。我已经明确提到“不应将图像转换为灰度图像”。您的答案建议将我的彩色图像转换为灰度图像(黑白),如果您愿意,请尝试看看。并且不要提出其他问题,也不要给我 - 没有尝试的分数。对你的 cmets 负责。
  • @PhilippSander 虽然类似,但此图像的问题与您链接的问题不同。

标签: java image-processing bufferedimage javax.imageio


【解决方案1】:

这里的代码没有问题。我可以使用我的 JPEGImageReader ImageIO 插件读取您的图像。这个图像阅读器试图对 JPEG 错误保持宽容,并且比标准的 Java JPEGImageReader 功能稍强。

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

  • 首先,图像中的 ICC 颜色配置文件有 4 个颜色分量,而图像数据只有 3 个颜色分量(这导致您看到的异常)。根本原因可能是转换软件不好。使用 ExifTool 或类似软件查看元数据以进行进一步调查。在这种情况下,我的读者只会给出警告并忽略 ICC 配置文件。
  • 其次,JPEG 流提前结束(缺少 EOI)。您会注意到图像的右下方有一些垃圾像素。除了获取原始图像之外,您无能为力(实际上,图像包含缩略图并且缩略图未损坏;如果确实需要,您可以尝试从中重新创建数据)。我的阅读器返回的图片与原生软件读取的图片一致。

【讨论】:

  • 嗨,Harald 非常感谢您的回答。现在这个错误对我来说很清楚,感谢您的解释。我尝试使用您的插件,但由于缺少一些依赖库,我无法编译它(我添加了一些十二猴子-imageio 罐子)。所以你介意解释一下使用插件的确切方法吗?如果你能展示简单的代码示例来为我的图像获取缓冲,那就太好了。
  • 关于如何在 java 应用程序中使用插件的详细信息,以及 servlet 容器可以在这里找到:github.com/haraldk/TwelveMonkeys
  • 工作就像一个魅力:)
  • @haraldK 好的,我发现包 libimage-exiftool-perl 包含 exiftool。所以,我有一个图像,其颜色分量为3,颜色空间数据为CMYK。 IIRC,CMYK 有 4 个颜色分量,不匹配是导致异常的原因。对吗?
  • Maven 依赖:<dependency><groupId>com.twelvemonkeys.imageio</groupId><artifactId>imageio-jpeg</artifactId><version>3.3.1</version></dependency>
猜你喜欢
  • 1970-01-01
  • 2014-05-08
  • 2014-06-04
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多