WEB开发网
开发学院WEB开发ASP.NET ASP.NET生成高质量缩略图通用函数(c#代码) 阅读

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

 2006-09-18 17:15:52 来源:WEB开发网   
核心提示:在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在asp里只能借助com组件实现,现在在.net里可以利用框架的强大的类库轻松实现.下面帖出完整的代码(带详细注释),参考了网上的一些文章及.net sdk相关内容.QQROOM网络家园的图片上传用到了所有的4种生成方式. /// <summary>

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

http://www.cnblogs.com/jialine/archive/2006/09/15/505459.html

Tags:ASP NET 生成

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接