如何使用 PHP 在图像文件中添加关键字?

How to add keywords in image file with PHP?

我尝试用这个方法添加关键词

//echoing the img to check the path
echo "<img src='uploads/Background597x1050px.jpg'>";

//creating the object and use of setImageProperty method to add keywords
$imgi = new Imagick('uploads/Background597x1050px.jpg');
$imgi->setImageProperty('keywords','test');

当我下载图片时,关键字部分没有任何显示(法语截图)

编辑:我也尝试过 iptcembed 方法,但是 iptcparse 编辑的标签 return 只是那些,如果我从 windows 添加了标签属性,它们不是 return,而是只有 exif_read_data 而不是 iptcembed

Imagick 不支持 comment 属性。

https://github.com/ImageMagick/ImageMagick/issues/55

https://github.com/Imagick/imagick/issues/124

正如Daniel W.所说,Imagick 仅支持 comment 属性 图像 JPEG

php.net 文档评论部分提到了这一点:https://www.php.net/manual/en/imagick.setimageproperty.php#123346

要为图像设置 comment 以外的其他属性,您必须为图像使用其他文件类型,例如 PNG

因此,您不能使用 ImageMagick 来完成您想要做的事情,这很令人失望——但这并不意味着您别无选择。在处理 JPEG 图像中的 EXIF 和 ITPC 数据时,我能想到的有两个:

  1. 使用专为处理 EXIF 数据而设计的第 3 方 PHP 库。我特别想到的一个叫做 Pel and supports JPEG and TIFF images. From what I have read, it can be tricky to use and the documentation 是稀疏的,但可能值得一试。

  2. 另一个选项称为 ExifTool, a handy command line utility that actually supports, EXIF, ITPC, XMP, among others (don't let the name fool you). If you add this command line tool to your server, you can then call it via PHP shell type commands and process the image that way. Just be aware that if the image is user input, you must be very careful to validate the image is actually an image, that the exif data doesn't have a payload injected, and do your absolute best to try to write as secure code as possible. One bit of code I found online 使用 exec() 调用 ExifTool,但在构建调用时也会调用 escapeshellcommand() 来清理参数。我怀疑如果您进一步研究该代码,图像本身也会使用 getimagesize() 和其他技术进行验证。