Java 从PNG图像中提取元数据

Java 从PNG图像中提取元数据,java,image,imagemagick,png,metadata,Java,Image,Imagemagick,Png,Metadata,我正在尝试从PNG图像格式中提取元数据。我在用这个图书馆 尽管它声称支持PNG格式,但当我尝试使用PNG图像时,会出现一个错误文件格式不受支持。从源代码(在方法readMetadata中)看,它似乎也不支持PNG格式: 我也尝试过这段代码,但它也没有提取PNG上的元数据 顺便说一句,我正在使用imagemagick在PNG上添加元数据,如下所示: mogrify -comment "Test" Demo/myimage.png 是否有人将此库用于PNG格式,或者是否有其他方法从PNG图像提取元

我正在尝试从PNG图像格式中提取元数据。我在用这个图书馆

尽管它声称支持PNG格式,但当我尝试使用PNG图像时,会出现一个错误
文件格式不受支持。从源代码(在方法
readMetadata
中)看,它似乎也不支持PNG格式:

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

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

mogrify -comment "Test" Demo/myimage.png
是否有人将此库用于PNG格式,或者是否有其他方法从PNG图像提取元数据?

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

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

 pngr.getMetadata().getTxtForKey("mykey")
一个有用的小Windows程序可以窥视PNG块结构的内部

更新:如果你想检查所有的文本块(记住有三种类型有一些不同,但是…)

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

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

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

 pngr.getMetadata().getTxtForKey("mykey")
一个有用的小Windows程序可以窥视PNG块结构的内部

更新:如果你想检查所有的文本块(记住有三种类型有一些不同,但是…)


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

这太好了!有没有办法检查所有键/值对?而不是使用
pngr.getMetadata().getxtforkey(“mykey”)查找特定键
我想查看图像元数据中的所有键/值对。太棒了!这很有效。谢谢。出于好奇,这三种类型是什么?@birdy:基本上是:tEXt:Latin1键和值编码,ztext:idem,但值是压缩存储的,iTXt:UTF-8编码谢谢。我刚刚查看了您项目的源代码,并且一个问题。维基百科说png文件的签名以
137
开始,但是,在你的源代码
pnghelperineral
方法
getPngIdSignature
中,它以
-119
开始。除了第一个之外,其他所有的都匹配。为什么会有差异?因为在Java中,字节是有符号的。在位级别上,它们是相同的数字(137=256-119)这太棒了!有没有办法遍历所有的键/值对?而不是使用
pngr.getMetadata().getxtforkey(“mykey”)查找特定的键
我想查看图像元数据中的所有键/值对。太棒了!这很有效。谢谢。出于好奇,这三种类型是什么?@birdy:基本上是:tEXt:Latin1键和值编码,ztext:idem,但值是压缩存储的,iTXt:UTF-8编码谢谢。我刚刚查看了您项目的源代码,并且一个问题。维基百科说png文件的签名以
137
开始,但是,在你的源代码
pnghelperineral
方法
getPngIdSignature
中,它以
-119
开始。除了第一个之外,其他所有的都匹配。为什么会有差异?因为在Java中,字节是有符号的。在位级别上,它们是相同的数字(137=256-119)看看这一页和那里的图书馆看看这一页和那里的图书馆