使用exif和/或损坏的元数据加载jpeg图像

时间:2012-10-25 14:21:23

标签: java image metadata

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]

如果我尝试阅读图像。

在相关的说明中:我们有时也会获得带有其他元数据的jpg图像,而ImageIO.read也无法处理这些图像,所以我真的很喜欢不尝试读取/处理/理解任何元数据的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);

1 个答案:

答案 0 :(得分:1)

这里没有多少选择。如果想要解决某个特定问题,可以毫无疑问地在Java中完成。然而,如果您只是寻求一个库在您的项目中进行一些图像处理而不需要成为图形专家程序员,那么开源Java库尚未与商业库或非Java库相提并论。 对SO的简单搜索将揭示状态。因此,如果您需要在生产环境中拥有可靠且极少意外的东西,您很可能(在我看来)最终会遇到以下情况之一(截至此日期的状态)交的):

1-商业产品,例如Snowbound RasterMaster

2-使用像ImageMagick(或GraphicsMagick)这样的工具,可以选择使用java接口,例如im4javaJMagick

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

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