文章教程

19.8创建水印图模块

8/31/2020 9:56:04 PM 人评论 次浏览

水印图是指为系统数据库中某上传图片创建对应的水印图文件。本模块的功能由文件CreateShui.aspx和文件CreateShui.aspx.cs实现。

创建水印图页面CreateShui.aspx是一个中间页面,其功能是调用水印处理文件CreateSuo.aspx.cs。

文件CreateShui.aspx的主要代码如下。

  <form id="form1" runat="server">
  <asp:Image ID="imgWatermark" runat="server" />
  </form>

创建水印图处理页面文件CreateShui.aspx.cs的功能是创建系统中指定图片的水印图。其主要实现代码如下。

  private string url = string.Empty;
  protected void Page_Load(object sender,EventArgs e)
  {  //获取被创建水印图的图像的地址
    if(Request.Params["SourceImageUrl"] != null)
    {
      url = Request.Params["SourceImageUrl"].ToString();
    }
    if(string.IsNullOrEmpty(url) == true) return;
    //设置源图和水印图的地址
    string sourcePath = Server.MapPath(AjaxFileImageSystem.STOREFILEPATH + url);
    string watermarkUrl = AjaxFileImageSystem.STROEWATERMARKIMAGEPATH + url;
    string watermarkPath = Server.MapPath(watermarkUrl);
    int startIndex = url.IndexOf("/") + 1;
    int endIndex = url.LastIndexOf(".");
    string watermark = url.Substring(startIndex,endIndex - startIndex);
    //创建水印图
    CreateWatermarkImage(sourcePath,watermarkPath,watermark);
    //输出水印图的信息
    Response.Write("创建图像(" + url + ")的水印图成功,保存文件:" + watermarkUrl + "<br />");
    //显示水印图片
    imgWatermark.ImageUrl = watermarkUrl;
  }
  //创建水印图
  private void CreateWatermarkImage(string sourcePath,string watermarkPath,string watermark)
  {
    Image sourceImage = Image.FromFile(sourcePath);
    //根据源图的大小创建一个新的.bmp图片
    Image watermarkImage = new Bitmap(sourceImage.Width,sourceImage.Height);
    Graphics g = Graphics.FromImage(watermarkImage);
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(System.Drawing.Color.Transparent);
    g.DrawImage(sourceImage,
      new System.Drawing.Rectangle(0,0,sourceImage.Width,sourceImage.Height),
      new System.Drawing.Rectangle(0,0,sourceImage.Width,sourceImage.Height),
      System.Drawing.GraphicsUnit.Pixel);
      Font font = new Font("宋体",429f,FontStyle.Bold);
      Brush brush = new SolidBrush(Color.Red);
      g.DrawString(watermark,font,brush,50,50);
try
    {  //保存水印图,其格式和原图格式相同
      watermarkImage.Save(watermarkPath,sourceImage.RawFormat);
    }
    catch(Exception ex)
    {
      throw new Exception(ex.Message);
    }
    finally
    { //释放资源
      sourceImage.Dispose();
      watermarkImage.Dispose();
      g.Dispose();
    }
  }

水印图创建成功后的显示效果如图19-8所示。

图片 388

图19-8 水印图创建成功的效果图

其中,函数CreateWatermarkImage()是文件CreateShui.aspx.cs的核心。此函数中各参数的含义说明如下。

  • sourcePath:源图的物理路径。
  • watermarkPath:保存水印图的物理路径。
  • watermark:显示的水印文字。

函数CreateWatermarkImage()的实现过程比较复杂,具体如下。

(1)根据sourcePath参数的源图地址导入源图。

(2)根据源图大小创建和源图相同大小的水印图。

(3)设置水印图的高质量插值法和平滑模式。

(4)清空画布颜色,并设置背景为透明。

(5)绘制水印图,并将绘制后的缩略图保存在指定位置——“ShuiImages”文件夹中。

(6)释放所占用的系统资源。

水印图处理流程如图19-9所示。

图19-9 水印图处理流程图

教程类别