19.8 创建水印图模块
水印图是指为系统数据库中某上传图片创建对应的水印图文件。本模块的功能由文件CreateShui.aspx和文件CreateShui.aspx.cs实现。
19.8.1 创建水印图页面
创建水印图页面CreateShui.aspx是一个中间页面,其功能是调用水印处理文件CreateSuo.aspx.cs。
文件CreateShui.aspx的主要代码如下。
<form id="form1" runat="server">
<asp:Image ID="imgWatermark" runat="server" />
</form>
19.8.2 创建水印图处理页面
创建水印图处理页面文件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所示。
图19-8 水印图创建成功的效果图
其中,函数CreateWatermarkImage()是文件CreateShui.aspx.cs的核心。此函数中各参数的含义说明如下。
- sourcePath:源图的物理路径。
- watermarkPath:保存水印图的物理路径。
- watermark:显示的水印文字。
函数CreateWatermarkImage()的实现过程比较复杂,具体如下。
(1)根据sourcePath参数的源图地址导入源图。
(2)根据源图大小创建和源图相同大小的水印图。
(3)设置水印图的高质量插值法和平滑模式。
(4)清空画布颜色,并设置背景为透明。
(5)绘制水印图,并将绘制后的缩略图保存在指定位置——“ShuiImages”文件夹中。
(6)释放所占用的系统资源。
水印图处理流程如图19-9所示。
图19-9 水印图处理流程图