在 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
我正在尝试删除现有的 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" 答案。您可能喜欢也可能不喜欢我提到的
所以,具体来说:
// 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