当前位置: 首页 > 面试题库 >

为什么使用JavaIO加载此jpg会导致CMMException?

熊俊人
2023-03-14
问题内容

带有此文件的ImageIO.read(imagePath)给出了CMMException,为什么Java无法处理此看似有效的文件http://www.jthink.net/jaikoz/scratch/front.jpg

java.awt.color.CMMException: Invalid image format
    at sun.awt.color.CMM.checkStatus(Unknown Source)
    at sun.awt.color.ICC_Transform.<init>(Unknown Source)
    at java.awt.image.ColorConvertOp.filter(Unknown Source)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(Unknown Source)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
    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)

问题答案:

我想我掌握了您的问题。我检查了您链接的图像(http://www.jthink.net/jaikoz/scratch/front.jpg)。其归因于Exif和JFIF标准。

当您执行类似操作时,ImageIO.read('some file')它将调用默认的sun
jpeg实现com.sun.imageio.plugins.jpeg.JPEGImageReader。过去在加载JFIF文件BUG
6488904时遇到问题
(请检查注释到最后)。

根据 规范
,Exif和JFIF都要求它们各自的应用程序标记段必须位于SOI(APP1和APP0)之后的第一个位置,因此,实际上每个规范都不可能使JPEG文件符合这两个标准。

虽然据报很久以前

解决方法是使用JAI库(https://jai.dev.java.net/binary-
builds.html#Release_builds)。我正在使用 Java(无本机加速) 版本。

SeekableStream seekableStream =  new FileSeekableStream(new File("front.jpg"));
ParameterBlock pb = new ParameterBlock();
pb.add(seekableStream);

BufferedImage image = JAI.create("jpeg", pb).getAsBufferedImage();

希望这会有所帮助。



 类似资料:
  • 我有以下图像标记使用和属性来插入响应图像: 据我所知,我只是告诉浏览器我所有可用的图像大小,它应该只下载基于视口大小的最合理的大小,等等。如果我将浏览器窗口(Chrome)调整为较小并刷新页面,则网络选项卡告诉我,它将下载我期望的图像(在本例中为800px),加上最大的图像(我从属性中假设)。 我在使用picturefill.js和不使用picturefill.js的情况下都试过,我在OS X 1

  • 问题内容: 好吧,我试图理解并阅读可能导致它的原因,但我却无法理解: 我的代码中有这个地方: 事实是,当它尝试调用某些方法时,它将引发而不是其他预期的异常(特别是)抛出 。我实际上知道调用了什么方法,所以我直接转到该方法代码,并为应该抛出的行添加了一个块 ,它实际上按预期抛出。然而,当它上升时,以某种方式更改了上面的代码并没有 按预期进行。 是什么原因导致这种行为的?我该如何检查? 问题答案: 通

  • 问题内容: 我正在编写一个PL / SQL过程,该过程需要动态生成一些查询,其中之一涉及使用来自查询的结果作为参数来创建临时表。 它可以正确编译,但是即使使用非常简单的查询,例如: IT抛出。如果我手动运行创建的查询,它将正确运行。在这一点上,我能够确定是什么导致了问题。 问题答案: 尝试丢掉“;” 从您立即执行的字符串内部。

  • 我用ASP.NET c#和angular 8开发了一个web API。我尝试在服务器端(使用NPOI)将一些数据从Oracle导出到Excel文件,并在客户端下载。我可以看到内存流有数据,但是在“返回响应”中,它没有返回给客户端,而是再次调用了函数。这是我的代码: 超文本标记语言: 键入脚本: API 控制器: DAL:(生成excel的最后一个函数。) 这是我在chrome调试器中看到的:[Ne

  • 为什么我在下面的代码段中的X轴上有一个溢出? 在我的网格容器上应用时,就会产生溢出。 null null https://codepen.io/anon/pen/wdjexz?editors=1100