- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
ImageIO.read 适用于我的大多数图像,但对于特定的 jpg 图像抛出此异常。 im = ImageIO.read(this.getClass().getResourceAsStream("p
我尝试使用 ImageIO.read() 读取 JPEG 文件,但对于这个 image它给了我一个 CMMException。看完后this和 this我知道 ImageIO 无法读取某种 jpeg
ImageIO.read(imagePath) 这个文件给出了一个 CMMException,为什么 Java 不能处理这个看似有效的文件 http://www.jthink.net/jaikoz/s
从数据库获取图像后,当我尝试调整它的大小时,通过使用以下代码传递宽度 public static BufferedImage resize(final byte[] pImageDat
我是一名优秀的程序员,十分优秀!