在 PHP 中使用 ImageMagick/Imagick 将版权字符串添加到 JPEG?

Add copyright string to JPEG using ImageMagick/Imagick in PHP?

我正在尝试删除现有的 EXIF 标签,然后使用以下基本代码应用版权字符串:

$im = new Imagick($file);
$im->stripImage();

// Embed new EXIF data
$im->setImageProperty('EXIF:ImageDescription', $copy_string);
$im->setImageProperty('EXIF:Copyright', $copy_string);
//$im->setImageProperty('Exif:ImageDescription', $copy_string);
//$im->setImageProperty('Exif:Copyright', $copy_string);
//$im->setImageProperty('ImageDescription', $copy_string);
//$im->setImageProperty('Copyright', $copy_string);

$im->writeImage($file);
$im->clear();
$im->destroy();

我找不到示例用法。该手册包含 CLI 属性 字符串 here。 "Embed" 下的 None 行有任何影响。我们将继续使用 Imagick 来解决这个问题。谢谢

如前所述,Imagemagick 不允许您写入 EXIF 数据,因此没有 "correct" 答案。您可能喜欢也可能不喜欢我提到的 作为解决方法的想法。本质上,您可以为要放入图像中的 EXIF 数据创建一个一次性图像作为 "template"(稍后我将解释如何),然后使用这是您实际图像的基础,并将图像数据与正确的 EXIF 数据合成在图像之上,正如 Danack 所说,ImageMagick 将保留 EXIF 数据。

所以,具体来说:

   // Open the copyright image with the correct EXIF data
   $cr = new Imagick('copyright.jpg');

   // Open the image to alter and get its size
   $file = 'test.jpg';
   $im = new Imagick($file);
   $d = $im->getImageGeometry(); 
   $w = $d['width']; 
   $h = $d['height']; 

   // Resize the copyright and composite the image over the top
   $cr->resizeImage($w,$h,imagick::FILTER_POINT,0,0);
   $cr->compositeImage($im,imagick::COMPOSITE_SRCOVER ,0,0);
   $cr->writeImage($file);

所以,我用我想要的 EXIF 数据制作了版权图像作为一次性操作 - 尽管使用 exiftool 但你只需要创建该图像一次 - 你不需要继续使用exiftool 或将其作为工具链的一部分,而只是保留它生成的模板:

# Make template copyright file
convert -size 1x1 xc:black copyright.jpg

# Put some EXIOF data in the template
exiftool -copyright="2015 Copyright Captain Hackalot" copyright.jpg