19.7 创建缩略图模块
缩略图模块的功能是为系统数据库中某上传图片创建其对应的缩略图文件,提高显示图片的效率。
19.7.1 创建缩略图页面
创建缩略图页面CreateSuo.aspx是一个中间页面,其功能是调用缩略处理文件Create Suo.aspx.cs。
文件CreateSuo.aspx的主要代码如下。
<body>
<form id="form1" runat="server">
<asp:Image ID="imgThumb" runat="server" />
</form>
</body>
19.7.2 创建缩略图处理页面
创建缩略图处理页面文件CreateSuo.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 thumbUrl = AjaxFileImageSystem.STORETHUMBIMAGEPATH + url;
string thumbPath = Server.MapPath(thumbUrl);
//创建缩略图
CreateThumbImage(sourcePath,thumbPath,
AjaxFileImageSystem.THUMBWIDTH,
AjaxFileImageSystem.THUMBHEIGHT,
ThumbMode.FixedRatio);
//输出缩略图的信息
Response.Write("创建图像(" + url + ")的缩略图成功,保存文件:" + thumbUrl + "<br />");
//显示缩略图片
imgThumb.ImageUrl = thumbUrl;
}
//创建缩略图
private void CreateThumbImage(string sourcePath,string thumbPath,int width,int height,
ThumbMode mode)
{
Image sourceImage = Image.FromFile(sourcePath);
//原始图片的宽度和高度
int sw = sourceImage.Width;
int sh = sourceImage.Height;
//缩略图的高度和宽度
int tw = width;
int th = height;
int x = 0,y = 0;
switch(mode)
{
case ThumbMode.FixedWidth: //指定缩略图的宽度,计算缩略图的高度
th = sourceImage.Height * width / sourceImage.Width;
break;
case ThumbMode.FixedHeight: //指定缩略图的高度,计算缩略图的宽度
tw = sourceImage.Width * height / sourceImage.Height;
break;
case ThumbMode.FixedWidthHeight: //指定缩略图的宽度和高度
break;
case ThumbMode.FixedRatio: //指定缩略图的比率,计算缩略图的宽度和高度
if((double)sw / tw > (double)sh / th)
{ //重新计算缩略图的高度
tw = width;
th = height * (sh * tw) / (th * sw);
}
else
{ //重新计算缩略图的宽度
tw = width * th * sw / (sh * tw);
th = height;
}
break;
default:
break;
}
//根据缩略图的大小创建一个新的BMP图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(tw,th);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
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,tw,th),
new System.Drawing.Rectangle(0,0,sw,sh),
System.Drawing.GraphicsUnit.Pixel);
try
{ //保存缩略图
bitmap.Save(thumbPath,sourceImage.RawFormat);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
finally
{ //释放资源
sourceImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
缩略图创建成功后的显示效果如图19-6所示。
图19-6 缩略图创建成功的效果图
其中,函数CreateThumbImage()是文件CreateSuo.aspx.cs的核心。此函数中各参数的含义说明如下。
- sourcePath:源图的物理路径。
- thumbPath:保存缩略图的物理路径。
- width:缩略图宽度。
- height:缩略图高度。
- mode:缩略图的缩放方式。
函数CreateThumbImage()的实现过程比较复杂,具体如下。
(1)根据sourcePath导入源图,并获取源图的高度和宽度。
(2)根据缩放方式设置缩略图的大小。
(3)根据设置值创建一张缩略图。
(4)设置缩略图的高质量插值法和平滑模式。
(5)清空画布颜色,并设置背景为透明。
(6)绘制缩略图,并将绘制后的缩略图保存在指定位置——“SuoImages”文件夹中。
缩略图处理流程如图19-7所示。
图19-7 缩略图处理流程图
注意:缩略图的设置参数保存在文件ASPNETAJAXWeb.cs中。