【问题标题】:How to add keywords in image file with PHP?如何使用 PHP 在图像文件中添加关键字?
【发布时间】:2021-04-25 18:46:21
【问题描述】:

我尝试用这种方法添加关键字

//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 返回的标签只是那些,如果我从windows 属性添加了标签,它们不会返回但只有exif_read_data 而不是iptcembed那些

【问题讨论】:

标签: php exif iptc


【解决方案1】:

所以,你不能使用 ImageMagick 来做你想做的事情,这很糟糕——但这并不意味着你没有选择。在处理 JPEG 图像中的 EXIF 和 ITPC 数据时,我能想到的有两个:

  1. 使用专为处理 EXIF 数据而设计的第 3 方 PHP 库。我特别想到的是Pel,它支持JPEG 和TIFF 图像。从what I have read 开始,使用起来可能会很棘手,documentation 很少,但可能值得一试。

  2. 另一个选项称为ExifTool,它是一个方便的命令行实用程序,实际上支持 EXIF、ITPC、XMP 等(不要被这个名字欺骗)。如果您将此command line tool 添加到您的服务器,则可以通过 PHP shell 类型命令调用它并以这种方式处理图像。请注意,如果图像是用户输入的,您必须非常小心地验证图像实际上是图像,exif 数据没有payload injected,并尽最大努力尝试编写为安全代码尽可能。一个bit of code I found online 使用exec() 调用ExifTool,但也在构建调用时调用escapeshellcommand() 来清理参数。我怀疑如果您进一步深入研究该代码,图像本身也会使用 getimagesize() 和其他技术进行验证。

【讨论】:

  • 首先,感谢您实际回答问题。你给了我足够的方向看,我有点迷路了。我尝试了 Pel,但没有完成这项工作。 ExifTool 是一个可靠的答案,我希望能够被人接受的答案,但是(在我自己的研究之后)主要的“停止”来自于 windows xp 生成的操作系统如何编码元数据。因此,如果有人遇到与我相同的问题,请参考此答案的第 2 点,并记住您必须重写旧标签以保持项目清洁。
【解决方案2】:

【讨论】:

    【解决方案3】:

    正如Daniel W. 已经说过的,Imagick 仅支持JPEG 图像的comment 属性。

    这在 php.net docs cmets 部分中提到:https://www.php.net/manual/en/imagick.setimageproperty.php#123346

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

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 2014-08-02
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多