注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网事

备忘录

 
 
 

日志

 
 

ASP.NET生成高质量缩略图通用函数(c#代码)  

2008-01-16 18:41:42|  分类: .Net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在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();

            }

        }

  评论这张
 
阅读(156)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018