asp.net 添加水印的代码(已测试)

时间:2022-01-30 16:17:56

加水印的功能代码如下所示 

复制代码代码如下:


/// <summary> 
/// 图片修改类,主要是用来保护图片版权的,版权归原作者所有 
/// </summary> 
public class picmark 

#region "member fields" 
private string modifyImagePath = null; 
private string drawedImagePath = null; 
private int rightSpace; 
private int bottoamSpace; 
private int lucencyPercent = 70; 
private string outPath = null; 
#endregion 
public picmark() 


#region "propertys" 
/// <summary> 
/// 获取或设置要修改的图像路径 
/// </summary> 
public string ModifyImagePath 

get { return this.modifyImagePath; } 
set { this.modifyImagePath = value; } 

/// <summary> 
/// 获取或设置在画的图片路径(水印图片) 
/// </summary> 
public string DrawedImagePath 

get { return this.drawedImagePath; } 
set { this.drawedImagePath = value; } 

/// <summary> 
/// 获取或设置水印在修改图片中的右边距 
/// </summary> 
public int RightSpace 

get { return this.rightSpace; } 
set { this.rightSpace = value; } 

//获取或设置水印在修改图片中距底部的高度 
public int BottoamSpace 

get { return this.bottoamSpace; } 
set { this.bottoamSpace = value; } 

/// <summary> 
/// 获取或设置要绘制水印的透明度,注意是原来图片透明度的百分比 
/// </summary> 
public int LucencyPercent 

get { return this.lucencyPercent; } 
set 

if (value >= 0 && value <= 100) 
this.lucencyPercent = value; 


/// <summary> 
/// 获取或设置要输出图像的路径 
/// </summary> 
public string OutPath 

get { return this.outPath; } 
set { this.outPath = value; } 

#endregion 
#region "methods" 
/// <summary> 
/// 开始绘制水印 
/// </summary> 
public void DrawImage() 

Image modifyImage = null; 
Image drawedImage = null; 
Graphics g = null; 
try 

//建立图形对象 
modifyImage = Image.FromFile(this.ModifyImagePath); 
drawedImage = Image.FromFile(this.DrawedImagePath); 
g = Graphics.FromImage(modifyImage); 
//获取要绘制图形坐标 
int x = modifyImage.Width - this.rightSpace; 
int y = modifyImage.Height - this.BottoamSpace; 
//设置颜色矩阵 
float[][] matrixItems ={ 
new float[] {1, 0, 0, 0, 0}, 
new float[] {0, 1, 0, 0, 0}, 
new float[] {0, 0, 1, 0, 0}, 
new float[] {0, 0, 0, (float)this.LucencyPercent/100f, 0}, 
new float[] {0, 0, 0, 0, 1}}; 
ColorMatrix colorMatrix = new ColorMatrix(matrixItems); 
ImageAttributes imgAttr = new ImageAttributes(); 
imgAttr.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); 
//绘制阴影图像 
g.DrawImage( 
drawedImage, 
new Rectangle(x, y, drawedImage.Width, drawedImage.Height), 
0, 0, drawedImage.Width, drawedImage.Height, 
GraphicsUnit.Pixel, imgAttr); 
//保存文件 
string[] allowImageType = { ".jpg", ".gif", ".png", ".bmp", ".tiff", ".wmf", ".ico" }; 
FileInfo file = new FileInfo(this.ModifyImagePath); 
ImageFormat imageType = ImageFormat.Gif; 
switch (file.Extension.ToLower()) 

case ".jpg": 
imageType = ImageFormat.Jpeg; 
break; 
case ".gif": 
imageType = ImageFormat.Gif; 
break; 
case ".png": 
imageType = ImageFormat.Png; 
break; 
case ".bmp": 
imageType = ImageFormat.Bmp; 
break; 
case ".tif": 
imageType = ImageFormat.Tiff; 
break; 
case ".wmf": 
imageType = ImageFormat.Wmf; 
break; 
case ".ico": 
imageType = ImageFormat.Icon; 
break; 
default: 
break; 

MemoryStream ms = new MemoryStream(); 
modifyImage.Save(ms, imageType); 
byte[] imgData = ms.ToArray(); 
modifyImage.Dispose(); 
drawedImage.Dispose(); 
g.Dispose(); 
FileStream fs = null; 
if (this.OutPath == null || this.OutPath == "") 

File.Delete(this.ModifyImagePath); 
fs = new FileStream(this.ModifyImagePath, FileMode.Create, FileAccess.Write); 

else 

fs = new FileStream(this.OutPath, FileMode.Create, FileAccess.Write); 

if (fs != null) 

fs.Write(imgData, 0, imgData.Length); 
fs.Close(); 


finally 

try 

drawedImage.Dispose(); 
modifyImage.Dispose(); 
g.Dispose(); 

catch { ;} 


#endregion 


前台代码如下所示 

复制代码代码如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="demo.WebForm1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<asp:FileUpload ID="FileUpload1" runat="server" /> 
<br /> 
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> 
</div> 
</form> 
</body> 
</html> 


cs类的代码如下所示 

复制代码代码如下:


protected void Button1_Click(object sender, EventArgs e) 

string extension = Path.GetExtension(this.FileUpload1.FileName).ToUpper(); 
string fileName = Guid.NewGuid().ToString(); 
string savePath = Server.MapPath("../upfile/" + fileName+ extension); 
if (!Directory.Exists(Path.GetDirectoryName(savePath))) 

Directory.CreateDirectory(Path.GetDirectoryName(savePath)); 

this.FileUpload1.SaveAs(savePath); 
//实例化类 
picmark wm = new picmark(); 
wm.DrawedImagePath = Server.MapPath("/upfile/" + "backlogo.gif") ; 
wm.ModifyImagePath = savePath; 
wm.RightSpace = 145; 
wm.BottoamSpace =17; 
wm.LucencyPercent = 50; 
wm.OutPath = Server.MapPath("/upfile/" + fileName.Replace("-","").ToUpper() + extension); 
wm.DrawImage(); 
//fileName = "_New_" + fileName; 
//string sPath = Server.MapPath("../upfile/" + fileName + extension); 
//this.FileUpload1.SaveAs(sPath); 
//保存加水印过后的图片,删除原始图片 
if (File.Exists(savePath)) 

File.Delete(savePath); 
//File.Delete(wm.OutPath);