从PNG图像中提取元数据

时间:2013-01-25 16:18:59

标签: java image imagemagick png metadata

我正在尝试从PNG图像格式中提取元数据。我正在使用这个库吗? http://code.google.com/p/metadata-extractor/

即使它声称支持PNG格式,但当我尝试使用PNG图像时,我会收到错误File format is not supported。从来源(在方法readMetadata中,它看起来也不支持PNG格式:http://code.google.com/p/metadata-extractor/source/browse/Source/com/drew/imaging/ImageMetadataReader.java?r=1aae00f3fe64388cd14401b2593b580677980884

我也尝试过这段代码,但它也没有提取PNG上的元数据。

BTW,我正在使用imagemagick在PNG上添加元数据,如下所示:

mogrify -comment "Test" Demo/myimage.png

是否有人将此库用于PNG格式,还是有其他方法从PNG图像中提取元数据?

1 个答案:

答案 0 :(得分:4)

您可以尝试PNGJ(我是开发人员)

请参阅此处example以转储所有块。 如果你想读取一个特定的文本块(回想一下,在PNG中,每个文本元数据都有一个键和一个值),你可以写

 pngr.getMetadata().getTxtForKey("mykey")

在PNG块结构中查看的有用的小Windows程序是TweakPNG

更新:如果你想检查所有文本块(请记住,有三种类型有一些差异,但是......)

PngReader pngr = FileHelper.createPngReader(new File(file));
pngr.readSkippingAllRows();
for (PngChunk c : pngr.getChunksList().getChunks()) {
      if (!ChunkHelper.isText(c))   continue;
      PngChunkTextVar ct = (PngChunkTextVar) c;
      String key = ct.getKey();
      String val = ct.getVal();
      // ... 
}

请记住,允许使用带有重复键的文本块。