我们正在使用Java2D调整上传到我们网站的照片的大小,但是我们遇到了一个问题(一个看似旧的问题,参见:http://forums.sun.com/thread.jspa?threadID = 5425569) - 一些特殊的JPEG CMMException当我们尝试ImageIO.read()包含其二进制数据的InputStream 时引发a :
java.awt.color.CMMException: Invalid image format
at sun.awt.color.CMM.checkStatus(CMM.java:131)
at sun.awt.color.ICC_Transform.<init>(ICC_Transform.java:89)
at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:516)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1326)
...
Run Code Online (Sandbox Code Playgroud)
(剪断了堆栈跟踪的剩余部分,这是我们的ImageIO.read()调用,servlet代码等)
我们将其缩小到特定相机拍摄的照片,然后我选择了一张触发此错误的照片:http://img214.imageshack.us/img214/5121/estacaosp.jpg.我们注意到这只发生在Sun的JVM上(在Linux和Mac上,只是在1.6.0_20上进行了测试) - 一台带有OpenJDK的测试机器可以顺利读取相同的照片,这可能是由于JPEG阅读器的不同实现.
不幸的是,我们无法在生产中切换JVM,也无法使用ImageMagick(http://www.imagemagick.org/)等本机相关解决方案.
考虑到这一点,我的问题是:是否存在可以处理链接照片之类的照片的ImageIO JPEG读取器的替代品?如果没有,我们可以使用另一个100%纯Java照片大小调整解决方案吗?
谢谢!
带有此文件的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)
Run Code Online (Sandbox Code Playgroud) 我正在制作一个程序,它从服务器获取有关字节数组中图像的数据.我正在将这些数据转换为24位BMP格式(无论是jpeg,png,bmp还是8-24-32bpp).首先,我将它保存到我的HD,然后我将它加载到JLabel的Icon中.虽然在某些情况下我得到以下异常,但效果很好:
java.io.EOFException at
javax.imageio.stream.ImageInputStreamImpl.readFully(ImageInputStreamImpl.java:353) at
com.sun.imageio.plugins.bmp.BMPImageReader.read24Bit(BMPImageReader.java:1188) at
com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:843) at
javax.imageio.ImageIO.read(ImageIO.java:1448) at
javax.imageio.ImageIO.read(ImageIO.java:1308)
Run Code Online (Sandbox Code Playgroud)
这条线(第二条)
File imgFile = new File("d:/image.bmp");
BufferedImage image = ImageIO.read(imgFile);
Run Code Online (Sandbox Code Playgroud)
在这些情况下:
首先,我认为也许bpp是问题,然后我认为可能图片太大,但我有案例它的工作和案例它不适用于这两个建议.我有点卡在这里,并且很乐意提出想法.