gpt4 book ai didi

java - 为什么使用 JavaIO 加载此 jpg 会出现 CMMException?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:43 25 4
gpt4 key购买 nike

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 (检查最后的评论)。

According to spec, both Exif and JFIF demands that their respective application marker segment must be the first right after SOI (APP1 and APP0) , so it is actually not possible per spec for an JPEG file to be compliant with both standards.

虽然早有报道

解决方法是使用 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();

希望这会有所帮助。

关于java - 为什么使用 JavaIO 加载此 jpg 会出现 CMMException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com