如何解决如何使用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
返回的标签只是那些,如果我从 windows 属性添加了标签,它们不会返回,而是带有 {{仅 1}} 而不是 exif_read_data
的
解决方法
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 数据的方法:
-
使用旨在处理 EXIF 数据的第 3 方 PHP 库。我特别想到的一种叫做 Pel 并且支持 JPEG 和 TIFF 图像。从 what I have read 开始,使用起来可能很棘手,而且 documentation 很稀疏,但可能值得一试。
-
另一个选项叫做 ExifTool,这是一个方便的命令行实用程序,它实际上支持 EXIF、ITPC、XMP 等(不要让这个名字欺骗了你)。如果您将此 command line tool 添加到您的服务器,则您可以通过 PHP shell 类型命令调用它并以这种方式处理图像。请注意,如果图像是用户输入的,则必须非常小心地验证图像实际上是图像,exif 数据没有 payload injected,并尽最大努力尝试编写为尽可能安全的代码。一个 bit of code I found online 使用
exec()
调用 ExifTool,但也在构建调用时调用escapeshellcommand()
来清理参数。我怀疑如果您进一步挖掘该代码,图像本身也会使用getimagesize()
和其他技术等进行验证。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。