1

java中有没有办法用exif元数据加载jpeg图像?

我不需要 exif 数据(或任何其他元数据),但问题是 JavaIO.read 给了我:

javax.imageio.IIOException: Unsupported Image Type
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:995) ~[na:1.7.0_09]
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:966) ~[na:1.7.0_09]
        at javax.imageio.ImageReader.read(ImageReader.java:940) ~[na:1.7.0_09]

如果我尝试阅读图像。

在相关说明中:我们有时还会获得带有 ImageIO.read 也无法处理的其他元数据的 jpg 图像,所以我真的想要一个不尝试读取/处理/理解任何元数据的 jpeg 阅读器。但我一直找不到。

图像数据本身较新损坏,所有其他软件(Gimp、Firefox 等)都可以正确读取和显示图像。

我什至尝试了以下方法,但它仍然无法读取图像。

            Iterator readers = ImageIO.getImageReadersByFormatName("jpg");
            ImageReader reader = (ImageReader)readers.next();
            ImageInputStream iis = ImageIO.createImageInputStream(sourceFile);
            reader.setInput(iis,true,true);

            BufferedImage image = reader.read(0);
4

1 回答 1

1

这里没有太多可用的选项。如果一个人想解决一个特定的问题,毫无疑问可以在 Java 中完成。然而,如果你只是在你的项目中寻找一个库来做一些图像处理,而不需要成为一名图形专家程序员,那么开源 Java 库还不能与商业库或非 Java 库相提并论。对 SO 的简单搜索将显示状态。因此,如果您需要在生产环境中获得可靠且意外最少的东西,您很可能(在我看来)最终会得到以下之一(截至本文发布之日的状态):

1- 商业产品,例如Snowbound RasterMaster

2-使用 ImageMagick(或 GraphicsMagick)之类的工具,并可以选择为它们使用 java 接口,例如im4javaJMagick

至于你的问题,你提到使用 mogrify。您也可以为输出图像设置色彩空间,它可能会解决您的问题:ImageMagick Colorspace

所以也许你可以在你的 jpg 文件上尝试:“/usr/bin/mogrify -strip -colorspace sRGB”。

于 2012-10-26T13:18:27.623 回答