我正在尝试删除现有的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这个解决方案。感谢。
答案 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