2012-10-25 40 views
0

在Java中有没有什么办法用EXIF元数据加载JPEG图像?加载与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); 
+0

你确定它的元数据?对于用CMYK编码的文件,我遇到了类似的问题。什么是您的图像的颜色模型/空间? –

+0

有趣的故事。原来是某些文件的元数据,以及其他文件的颜色配置文件问题。但是现在我只是在文件上运行/ usr/bin/mogrify -strip如果我无法打开它们,它会处理大多数问题,除了所有的颜色配置文件问题。我仍然希望有一个更好的java库来处理颜色配置文件(Expecially cmyk)/愚蠢的伽马值和相似的问题(我目前有一个.jpg文件,其中有更多的色域数据,然后图像数据)问题的JPG文件。 – MTilsted

回答

1

这里没有太多选择。如果你想解决一个特定的问题,那么在Java中毫无疑问是可以完成的。然而,如果你只是寻求一个库来在你的项目中进行一些图像处理,而不需要成为一个图形专家程序员,那么开源的java库还不能与商业的或者非Java的库相提并论。 在SO上进行简单的搜索会显示状态。因此,如果您需要在生产环境中获得可靠且最小的惊喜,那么您最有可能(在我看来)最终会出现以下情况之一(状态截至本帖子发布之日):

1-市售品,例如Snowbound RasterMaster

2-使用像ImageMagick的(或GraphicsMagick工具)的工具使用他们的一个Java接口,例如im4javaJMagick的选项。

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

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