winform怎么在图片上添加水印

2023-04-14 04:57 68次浏览 攻略

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

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

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

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

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

  1. imageworkshop

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

  2. GifFrameextractor

    composer 地址:

  3. gifcreator

composer 地址:

二、准备好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('代码庸医', ';, 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;, $gc->getGif());

下面是整体代码:

最后的效果图:

生成前

生成后

相关推荐