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

时间:2016-06-13 13:36:13

标签: php imagemagick imagick exif

我正在尝试删除现有的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。 “嵌入”下的所有行都没有任何效果。我们将继续使用Imagick这个解决方案。感谢。

1 个答案:

答案 0 :(得分:2)

如前所述,Imagemagick不允许您编写EXIF数据,因此没有"正确的" 答案。您可能或可能不喜欢我提到的here作为解决方法的想法。从本质上讲,您可以创建一个一次性图像作为"模板" ,用于您想要放入图像的EXIF数据(我将在后面解释如何)和然后使用它作为实际图像的基础,并使用正确的EXIF数据将图像数据合成到图像上,正如Danack所说,ImageMagick将保留EXIF数据。

所以,具体而言:

DidFinishLoading

所以,我使用我想要的EXIF数据制作版权图像作为一次性操作 - 虽然使用NSURLProtocol但你只需创建一次图像 - 你不需要继续使用 // 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); 或将其作为工具链的一部分,而不是只保留它生成的模板:

exiftool