是否有100%Java替代ImageIO来读取JPEG文件?

我们正在使用Java2D调整上传到我们网站的照片的大小,但是遇到了一个问题(一个看似古老的文件,请参阅:http

:

//forums.sun.com/thread.jspa?threadID=5425569)-一些特定的JPEG

CMMException当我们尝试ImageIO.read()输入包含其二进制数据的InputStream 时引发:

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)

...

(删除了堆栈跟踪的其余部分,这是我们的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/)。

考虑到这一点,我的问题是:是否存在可以处理照片(例如链接的照片)的ImageIOs

JPEG阅读器的替代品?如果没有,还有另外一种我们可以使用的100%纯Java照片大小调整解决方案吗?

谢谢!

回答:

对您而言可能有用的一个库可能是Java Advanced Imaging

Library(JAI)。

使用此库可能比使用ImageIO复杂得多,但是在我刚刚运行的快速测试中,它确实打开并显示了您链接的问题图像文件。

public static void main(String[] args) {

RenderedImage image = JAI.create("fileload", "estacaosp.jpg");

float scale=(float) 0.5;

ParameterBlock pb = new ParameterBlock();

pb.addSource(image);

pb.add(scale);

pb.add(scale);

pb.add(1.0F);

pb.add(1.0F);

pb.add(new InterpolationNearest() );// ;InterpolationBilinear());

image = JAI.create("scale", pb);

// Create an instance of DisplayJAI.

DisplayJAI srcdj = new DisplayJAI(image);

JScrollPane srcScrollPaneImage = new JScrollPane(srcdj);

// Use a label to display the image

JFrame frame = new JFrame();

frame.getContentPane().add(srcScrollPaneImage, BorderLayout.CENTER);

frame.pack();

frame.setVisible(true);

}

运行此代码后,图像似乎可以正常加载。然后使用ParamaterBlock将其调整为50%

最后,如果您想保存文件,可以致电:

String filename2 = new String ("tofile.jpg");

String format = new String ("JPEG");

RenderedOp op = JAI.create ("filestore", image, filename2, format);

我希望这能够帮到你。祝你好运。

以上是 是否有100%Java替代ImageIO来读取JPEG文件? 的全部内容, 来源链接: utcz.com/qa/400499.html

回到顶部