java - 从 PNG 图像中提取元数据

标签 java image imagemagick png metadata

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

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

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

顺便说一句,我正在使用 imagemagick 在 PNG 上添加元数据,如下所示:

mogrify -comment "Test" Demo/myimage.png

有人用过这个库来处理 PNG 格式吗?或者还有其他方法从 PNG 图像中提取元数据吗?

最佳答案

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

参见例如这里example转储所有 block 。 如果您想读取特定的文本 block (回想一下,在 PNG 中,每个文本元数据都有一个键和一个值),您可以编写

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

一个有用的小 Windows 程序可以查看 PNG block 结构的内部是 TweakPNG

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

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();
      // ... 
}

还要记住,允许使用具有重复键的文本 block 。

关于java - 从 PNG 图像中提取元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14525858/

相关文章:

html - 通过 SVG 将图像添加到列表中

安卓 : Display images in Webview

java - 为什么 ADT 好而继承不好?

java - 体重指数计算器 Java

java - 在 Java 中管理属性

java - java.sql.SQLException "database in auto-commit mode"的原因

c - 为什么我从 libusb 批量传输的 usb 输出中收到 0 字节的数据?

php - 压缩图像质量(从 4MB 到 2MB)而不丢失其尺寸

php - 将 PDF 转换为 PNG 供 Tesseract 处理

ruby-on-rails - gem install rmagick -v 2.13.1 错误 Failed to build gem native extension on Mac OS 10.9.1