我想获取用户拖放到网页中的图像的元数据。我已经设置了拖放。但是,图像实际上并未上传到服务器。它在本地访问。我仍然可以使用 Javascript 从图像中获取元数据吗?如果是这样,我该怎么做?有哪些好的图书馆?
如果没有,我是否绝对必须上传图像才能提取元数据?在 Javascript 中上传图像的最快方法是什么?
我可以使用R提取必要的信息,但是为了在整个项目中保持一致,我希望能够使用Python(最好是Python3)做到这一点。我需要一个名为“设置”的标签的内容。此标记包含XML,然后需要对其进行解析。
在R中获取元数据非常简单:
library(exifr)
library(XML)
path = file.path('path', 'to', 'file')
x = read_exif(file.path(path,'image.png'))
x$Settings
Run Code Online (Sandbox Code Playgroud)
看起来Python无法做到这一点,这让我很困惑。或这样做需要我比目前拥有更多的Python和PNG知识。如何使用Python提取PNG元数据?
PyPng PyPNG似乎很有希望。检查每个块的长度,似乎“ Settings”标签位于zTXt块中。
import png
filename = "C:\\path\\to\\image.png"
im = png.Reader(filename)
for c in im.chunks():
print(c[0], len(c[1]))
>>>
IHDR 13
tIME 7
pHYs 9
IDAT 47775
zTXt 714
IEND 0
Run Code Online (Sandbox Code Playgroud)
以上摘自这篇文章。但是,仍不清楚如何提取zTXt数据。
hachoir3
使用该hachoir3软件包,我尝试了以下操作:
from hachoir.parser import createParser
from hachoir.metadata import extractMetadata
filename = "C:\\path\\to\\file\\image.png"
parser = createParser(filename)
metadata = extractMetadata(parser)
for line in metadata.exportPlaintext():
print(line)
Run Code Online (Sandbox Code Playgroud)
这给了我以下内容:
Metadata:
- Image width: 1024 …Run Code Online (Sandbox Code Playgroud)