用PHP代码给GIF动画图片加水印,保持原有的动画效果

在程序开发时,上传图片加水印是常见的功能。

但是常规加水印的方法对GIF动画图片就会产生问题,加上水印后,GIF 图片就不动了。

那么有没有办法给GIF动画图片加上水印后,保持原有的动画效果呢(效果图在最后)?

下面就给大家详细的说说:

一、首先分别下载3个开源的php类库

imageworkshop

composer 地址:https://packagist.org/packages/sybio/image-workshop

GifFrameExtractor

composer 地址:https://packagist.org/packages/sybio/gif-frame-extractor

gifcreator

composer 地址:https://packagist.org/packages/sybio/gif-creator

二、准备好gif图片

三、主要代码

1.你的GIF地址

$gifPath = ‘123.gif’;

2.获取gif宽和高(后面有用)

$imginfo=getimagesize($gifPath);

3.判断图片是否是GIF动画图

if (GifFrameExtractor::isAnimatedGif($gifPath))

4.将GIF图片释放成一帧一帧的图

$gfe = new GifFrameExtractor();

$frames = $gfe->extract($gifPath,true);

5.初始化水印

$watermarkLayer = ImageWorkshop::initTextLayer(‘代码庸医’, ‘simkai.ttf’, 15);

我这里是直接用字作为水印,也可以用图片作为水印,方法如下:

$watermarkLayer = ImageWorkshop::initFromPath(‘你的水印图片地址’);

6.给每一个图片帧加上水印

foreach ($frames as $frame)

{

$frameLayer = ImageWorkshop::initFromResourceVar($frame[‘image’]);

$frameLayer->resizeInPixel($imginfo[0], $imginfo[1], true); // 设置图片高度宽度

$frameLayer->addLayerOnTop($watermarkLayer, 20, 20, ‘LB’); // 水印位置

$retouchedFrames[] = $frameLayer->getResult();

}

7.合并每一帧生成加上水印的GIF图片

$gc = new GifCreator();

$gc->create($retouchedFrames, $gfe->getFrameDurations(), 0);

file_put_contents(‘pic/newgif.gif’, $gc->getGif());


关注公众号,了解更多it技术(it问答网

发表评论

电子邮件地址不会被公开。