正文

ASP.NET生成高质量缩略图通用函数 2006-09-06 09:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/Csharpsky/18322.html

分享到:

在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在asp里只能借助com组件实现,现在在.net里可以利用框架的强大的类库轻松实现.下面帖出完整的代码(带详细注释),参考了网上的一些文章及.net sdk相关内容.QQROOM网络家园的图片上传用到了所有的4种生成方式.         /// <summary>        /// 生成缩略图        /// </summary>        /// <param name="originalImagePath">源图路径(物理路径)</param>        /// <param name="thumbnailPath">缩略图路径(物理路径)</param>        /// <param name="width">缩略图宽度</param>        /// <param name="height">缩略图高度</param>        /// <param name="mode">生成缩略图的方式</param>            public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)        {            Image originalImage = Image.FromFile(originalImagePath);                        int towidth = width;            int toheight = height;                    int x = 0;            int y = 0;            int ow = originalImage.Width;            int oh = originalImage.Height;                    switch (mode)            {                        case "HW"://指定高宽缩放(可能变形)                                    break;                case "W"://指定宽,高按比例                                        toheight = originalImage.Height * width/originalImage.Width;                    break;                case "H"://指定高,宽按比例                    towidth = originalImage.Width * height/originalImage.Height;                                        break;                        case "Cut"://指定高宽裁减(不变形)                                    if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight)                    {                        oh = originalImage.Height;                        ow = originalImage.Height*towidth/toheight;                        y = 0;                        x = (originalImage.Width - ow)/2;                    }                    else                    {                        ow = originalImage.Width;                        oh = originalImage.Width*height/towidth;                        x = 0;                        y = (originalImage.Height - oh)/2;                    }                    break;                                    default :                    break;            }                            //新建一个bmp图片            Image bitmap = new System.Drawing.Bitmap(towidth,toheight);            //新建一个画板            Graphics g = System.Drawing.Graphics.FromImage(bitmap);            //设置高质量插值法            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;            //设置高质量,低速度呈现平滑程度            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;            //清空画布并以透明背景色填充            g.Clear(Color.Transparent);                    //在指定位置并且按指定大小绘制原图片的指定部分            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),                 new Rectangle(x, y, ow,oh),                GraphicsUnit.Pixel);            try            {                            //以jpg格式保存缩略图                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);            }            catch(System.Exception e)            {                throw e;            }            finally            {                originalImage.Dispose();                bitmap.Dispose();                                        g.Dispose();            }        } 关键方法Graphics.DrawImage见ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemdrawinggraphicsclassdrawimagetopic11.htm

阅读(1664) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册