但是常规加水印的方法对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());
下面是整体代码:
末了的效果图:
天生前
天生后