1
24
XMP数据实际上嵌入到图像文件中,因此可以使用PHP的字符串函数从图像文件本身提取它。 下面演示了这个过程(我正在使用 SimpleXML 但是,其他每一个XML API,甚至简单而巧妙的字符串解析,都可能给出相同的结果):
我只想说两句:
|
2
12
我只是在花了这么多时间之后才回复这个问题,因为这似乎是在谷歌搜索如何解析XMP数据时的最佳结果。我在代码中看到过几次几乎相同的代码片段,这是对内存的严重浪费。下面是Stefan在其示例之后提到的fopen()方法的一个示例。
|
3
4
linux上的一种简单方法是调用exiv2程序,该程序在debian上的同名软件包中提供。
|
4
3
我知道。。。这是一个古老的线索,但它对我有帮助,当我正在寻找一种方法来做这件事,所以我认为这可能会有助于其他人。 我采用了这个基本的解决方案,并对其进行了修改,使其能够处理标记在块之间分割的情况。这使得块大小可以是您想要的大小。
|
6
1
Bryan的解决方案是目前为止最好的,但有一些问题,所以我修改了它以简化它,并删除了一些功能。 我发现他的解决方案有三个问题: A) 如果提取的块正好位于我们正在搜索的字符串之间,它将找不到它。较小的块大小更有可能导致此问题。
C) 如果没有找到xmp数据,则添加到末尾以中断while循环的else语句有一个副作用,即如果在第一次传递中没有找到start元素,它将不再检查块。这可能也很容易解决,但第一个问题不值得。 下面我的解决方案没有那么强大,但它更强大。它将只检查一个块,并从中提取数据。只有当开始和结束在该块中时,它才会工作,因此块大小需要足够大,以确保它始终捕获该数据。根据我使用Adobe Photoshop/Lightroom导出文件的经验,xmp数据通常从20kB左右开始,到45kB左右结束。我的块大小为50k,似乎适合我的图像,如果你在导出时去掉一些数据,比如有很多显影设置的CRS块,就会少很多。
|
7
1
感谢塞巴斯蒂安B.的简短版本:)。如果要避免这个问题,当chunk_大小对于某些文件来说太小时,只需添加递归即可。
|
8
1
如果您有可用的ExifTool(一个非常有用的工具),并且可以运行外部命令,那么可以使用它的选项提取XMP数据(
|
9
0
https://github.com/jeroendesloovere/xmp-metadata-extractor
|