从PNG图像中提取元数据

Abh*_*ood 2 php metadata image imagemagick image-processing

如何从像这个网站的图像中提取元数据?我使用过exev2库,但与本网站相比,它只提供有限的数据.有更高级的图书馆吗?

我已经尝试过hacoir-metadata Python库.

Windows如何提取图像的细节(我们从属性中看到的)?

Fre*_*nan 5

PNG文件由块组成,其中大多数是IDAT块,其中包含平均PNG中的压缩像素数据.所有PNG都以IHDR块开头,以IEND块结束.由于PNG是一种非常灵活的标准,因此可以通过组合新类型的块来扩展它 - 这就是动画PNG的工作原理.所有浏览器都可以看到第一帧,但了解APNG中使用的块类型的浏览器可以看到动画.

有很多地方可以将文本数据存储在PNG图像中,甚至可以存储元数据的更多位置.这是一个非常方便的总结.你提到了"描述标签",它只能存在于文本块中,所以我会专注于它.

PNG标准包含三种不同类型的文本块:tEXt(Latin-1编码,未压缩),zTXt(压缩,也是Latin-1),最后是iTXt,这是三者中最有用的,因为它可以包含UTF-8编码文本,可以压缩或解压缩.

所以,你的问题变成了,"提取文本块的方便方法是什么?"

起初,我认为pypng可以做到这一点,但它不能:

文本/ zTXt/iTXt

阅读时忽略.没有生成.

幸运的是,Pillow对此表示支持 - 幽默地说它只是在你提出原始问题前一天才添加!

所以,不用多说,让我们找到一个包含iTXt块的图像:这个例子应该这样做.

>>> im = Image.open('/tmp/itxt.png')
>>> im.info 
{'interlace': 1, 'gamma': 0.45455, 'dpi': (72, 72), 'Title': 'PNG', 'Author': 'La plume de ma tante'}
Run Code Online (Sandbox Code Playgroud)

根据源代码,还涵盖了tEXtzTXt.

对于更一般的情况,查看其他读者,JPEG和GIF也似乎也很好地覆盖了这些格式 - 所以我建议PIL.这并不是说维护者hacoir-metadata不会欣赏添加文本块支持的拉取请求!:-)