如何从像this website这样的图像中提取元数据?我使用过exev2库,但与本网站相比,它只提供有限的数据。有没有更高级的图书馆?
我已经尝试过hacoir-metadata Python库。
Windows如何提取图像的细节(我们从属性中看到的)?
答案 0 :(得分:5)
PNG文件由块组成,其中大多数是IDAT块,其中包含平均PNG中的压缩像素数据。所有PNG都以IHDR块开头,以IEND块结束。由于PNG是一种非常灵活的标准,因此可以通过组合新类型的块来扩展它 - 这就是动画PNG的工作原理。所有浏览器都可以看到第一帧,但了解APNG中使用的块类型的浏览器可以看到动画。
有很多地方可以将文本数据存储在PNG图像中,甚至可以存储元数据的更多位置。 Here is a very convenient summary.您提到了“描述标记”,它只能存在于文本块中,所以我会专注于它。
PNG标准包含三种不同类型的文本块: tEXt (Latin-1编码,未压缩), zTXt (压缩,也是Latin-1),最后 iTXt ,这是三者中最有用的,因为它可以包含UTF-8编码的文本,可以压缩或解压缩。
所以,你的问题变成了“提取文本块的简便方法是什么?”
起初,我认为pypng可以做到这一点,but it cannot:
文字/ zTXt / iTXt 强>
阅读时忽略。没有生成。
幸运的是,Pillow对此表示支持 - 幽默it was added only one day before you asked your original question!
所以,不用多说,让我们找一个包含iTXt块的图像:this example应该这样做。
>>> im = Image.open('/tmp/itxt.png')
>>> im.info
{'interlace': 1, 'gamma': 0.45455, 'dpi': (72, 72), 'Title': 'PNG', 'Author': 'La plume de ma tante'}
对于更一般的情况,查看其他读者,JPEG和GIF也似乎也很好地覆盖了这些格式 - 所以我建议PIL。这并不是说hacoir-metadata
的维护者不会欣赏添加文本块支持的拉取请求! : - )
答案 1 :(得分:0)
你可以试试Daniel Chesterton的这个pre-alpha解决方案。我不确定这只是你想要的,还是它是有用解决方案的一部分,但我相信你可以通过玩它来解决它。
答案 2 :(得分:0)
我发现此代码埋在Pillow pull request
中from PIL import PngImagePlugin
info = PngImagePlugin.PngInfo() # read PNG data
info.add_text("foo", "bar") # write PNG data
img.save(filenew, "png", pnginfo=info)