0

我正在使用此代码对图像进行水印,然后将其保存为水印。当我尝试为 gif 图像添加水印时的问题是,我只获得了该 gif 的第一帧。

imagecopy(
   // source
   $main_image,
   // destination
   $logoImage,
   // destination x and y
   $imageWidth-$logoWidth, $imageHeight-$logoHeight,
   // source x and y
   0, 0,
   // width and height of the area of the source to copy
   $logoWidth, $logoHeight);
    if($type == "png"){imagepng($main_image, $new_path);}
    if($type == "jpeg"){imagejpeg($main_image, $new_path);}
    if($type == "gif"){imagegif($main_image, $new_path);}

我该如何解决这个问题?

4

1 回答 1

0

image*PHP 中的函数使用 GD 库。尽管 PHP 手册中没有说明,GD 库不支持 GIF 动画(尽管网站上的许多评论都提到了它)。目前,GD Project 的网站也无法进一步确认。

或者,如果你ImageMagick有空,你可以使用exec()调用convert应用程序来渲染你的水印+动画服务器端(参考):

$animated_gif = "source.gif";
$gif_with_watermark = "destination.gif";
$watermark = "watermark.png";

$cmd = 'convert '
       . escapeshellarg($animated_gif)
       . ' -coalesce -gravity South -geometry +0+0 null: '
       . escapeshellarg($watermark)
       . ' -layers composite -layers optimize '
       . escapeshellarg($gif_with_watermark);
exec($cmd);
于 2012-08-31T21:15:49.057 回答