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

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

  

复制代码 代码如下:

  /// <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);

  }