下面是详细的“.net c# gif动画如何添加图片水印实现思路及代码”的攻略。
思路
添加图片水印到gif动画,可以考虑以下步骤:
- 将gif动画拆分成多个帧(图片),可以使用
GifDecoder
类进行解码。解码后可以获得每一帧的Bitmap
对象。 - 对于每个
Bitmap
对象,使用Graphics
类的DrawImage
方法,将原图和水印图像合并,得到带水印的新图像。 - 将所有带有水印的
Bitmap
对象重新组成gif动画,可以使用AnimatedGifEncoder
类进行编码。
代码示例
以下是两个示例,分别演示了如何添加图片水印和文本水印到gif动画中。
添加图片水印
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
using Gif.Components;
namespace AddWatermarkToGif
{
class Program
{
static void Main(string[] args)
{
// 输入gif文件名和水印文件名
string inputFilePath = @"C:\input.gif";
string watermarkFilePath = @"C:\watermark.png";
// 解码gif文件,获取每个帧的Bitmap对象
GifDecoder decoder = new GifDecoder();
decoder.Read(inputFilePath);
int frameCount = decoder.GetFrameCount();
Bitmap[] frames = new Bitmap[frameCount];
for (int i = 0; i < frameCount; i++)
{
frames[i] = decoder.GetFrame(i);
}
// 加载水印图像
Bitmap watermark = (Bitmap)Image.FromFile(watermarkFilePath);
// 使用Graphics类绘制带水印的新图像
for (int i = 0; i < frameCount; i++)
{
Bitmap frame = frames[i];
using (Graphics g = Graphics.FromImage(frame))
{
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
g.DrawImage(watermark, new Rectangle(10, 10, 100, 100));
}
frames[i] = frame;
}
// 将帧Bitmap对象重新编码成gif文件
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.Start("output.gif");
encoder.SetRepeat(0);
encoder.SetDelay(decoder.GetDelay(0));
for (int i = 0; i < frameCount; i++)
{
encoder.AddFrame(frames[i]);
encoder.SetDelay(decoder.GetDelay(i));
}
encoder.Finish();
}
}
}
添加文本水印
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;
using Gif.Components;
namespace AddWatermarkToGif
{
class Program
{
static void Main(string[] args)
{
// 输入gif文件名和水印文字
string inputFilePath = @"C:\input.gif";
string watermarkText = "© 2022 My Website";
// 解码gif文件,获取每个帧的Bitmap对象
GifDecoder decoder = new GifDecoder();
decoder.Read(inputFilePath);
int frameCount = decoder.GetFrameCount();
Bitmap[] frames = new Bitmap[frameCount];
for (int i = 0; i < frameCount; i++)
{
frames[i] = decoder.GetFrame(i);
}
// 使用Graphics类绘制带水印的新图像
for (int i = 0; i < frameCount; i++)
{
Bitmap frame = frames[i];
using (Graphics g = Graphics.FromImage(frame))
{
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
g.DrawString(watermarkText, new Font("Arial", 12), Brushes.White, new Point(10, 10));
}
frames[i] = frame;
}
// 将帧Bitmap对象重新编码成gif文件
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.Start("output.gif");
encoder.SetRepeat(0);
encoder.SetDelay(decoder.GetDelay(0));
for (int i = 0; i < frameCount; i++)
{
encoder.AddFrame(frames[i]);
encoder.SetDelay(decoder.GetDelay(i));
}
encoder.Finish();
}
}
}
以上两个示例演示了如何添加图片水印和文本水印到gif动画中。要使用这些示例,需要在项目中引用 Gif.Components.dll
库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net c# gif动画如何添加图片水印实现思路及代码 - Python技术站