nasdaqhe's blog

被生活强jian着
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2006-10-27 17:18  nasdaqhe  阅读(215)  评论(0编辑  收藏  举报
///   <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