[C#]图片添加水印

//增加水印主要方法
private void addWaterMark_Click(object sender, EventArgs e)
{
results.Text = "";
if (this.selFloderValue.Text == "")
{
results.Text += "未选择文件夹目录\n";
return;
}
if (warterMarkValue.Text == "")
{
results.Text += "未输入水印文本\n";
return;
}
//获取所有目录
StringBuilder allDirs = new StringBuilder("");
allDirs.Append(this.selFloderValue.Text);
getAllDirectories(this.selFloderValue.Text, allDirs);
string[] allDirArr = CmsTool.common.Tool.Tool.split(allDirs.ToString(), ":*");
//获取所有图片文件
foreach (string strDir in allDirArr)
{
string[] files = Directory.GetFiles(strDir);
foreach (string file in files)
{
//增加水印
if (File.Exists(file))
{
if (file.ToLower().EndsWith(".jpg") || file.ToLower().EndsWith(".png"))
{
System.Drawing.Image image = null;
System.Drawing.Graphics g = null;
try
{
string tmpPath = file + "Tmp";
//文字水印
image = System.Drawing.Image.FromFile(file);
g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(image, 0, 0, image.Width, image.Height);
System.Drawing.Font f = new System.Drawing.Font("Palatino Linotype", 18);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
string wmValue = warterMarkValue.Text;
//增加水印  图片水印调用 g.DrawImage方法
g.DrawString(wmValue, f, b, image.Width - 200, image.Height - 40);
g.Dispose();
image.Save(tmpPath);
image.Dispose();
File.Delete(file);
File.Move(tmpPath, file);
results.Text += file + "增加水印成功\n";
}
catch (Exception e1)
{
if (g != null) g.Dispose();
if (image != null) image.Dispose();
results.Text += file + "增加水印失败\n";
}
}
}
}
}
}

调用GIF等含有索引的图片会产生异常。

MSDN引用:

如果图像是索引像素格式,此方法将引发异常,同时产生以下消息:“无法从带有索引像素格式的图像创建 Graphics 对象。”。下面的列表列出了各种索引像素格式。

Format1bppIndexed
Format4bppIndexed
Format8bppIndexed

当图像是以下任一像素格式时,此方法也会引发异常。

Undefined
DontCare
Format16bppArgb1555
Format16bppGrayScale

为释放 Graphics 和由 FromImage 方法创建的相关资源,您应该始终调用 Dispose 方法。


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。