生成缩略图通用函数(转载)

 1         /// <summary>
 2         /// 生成缩略图
 3         /// </summary>
 4         /// <param name="originalImagePath">源图路径(物理路径)</param>
 5         /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
 6         /// <param name="width">缩略图宽度</param>
 7         /// <param name="height">缩略图高度</param>
 8         /// <param name="mode">生成缩略图的方式</param>    
 9         public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
10         {
11             Image originalImage = Image.FromFile(originalImagePath);
12             
13             int towidth = width;
14             int toheight = height;
15         
16             int x = 0;
17             int y = 0;
18             int ow = originalImage.Width;
19             int oh = originalImage.Height;        
20 
21             switch (mode)
22             {        
23                 case "HW"://指定高宽缩放(可能变形)                
24                     break;
25                 case "W"://指定宽,高按比例                    
26                     toheight = originalImage.Height * width/originalImage.Width;
27                     break;
28                 case "H"://指定高,宽按比例
29                     towidth = originalImage.Width * height/originalImage.Height;                    
30                     break;        
31                 case "Cut"://指定高宽裁减(不变形)                
32                     if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight)
33                     {
34                         oh = originalImage.Height;
35                         ow = originalImage.Height*towidth/toheight;
36                         y = 0;
37                         x = (originalImage.Width - ow)/2;
38                     }
39                     else
40                     {
41                         ow = originalImage.Width;
42                         oh = originalImage.Width*height/towidth;
43                         x = 0;
44                         y = (originalImage.Height - oh)/2;
45                     }
46                     break;                    
47                 default :
48                     break;
49             }    
50             
51             //新建一个bmp图片
52             Image bitmap = new System.Drawing.Bitmap(towidth,toheight);
53 
54             //新建一个画板
55             Graphics g = System.Drawing.Graphics.FromImage(bitmap);
56 
57             //设置高质量插值法
58             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
59 
60             //设置高质量,低速度呈现平滑程度
61             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
62 
63             //清空画布并以透明背景色填充
64             g.Clear(Color.Transparent);        
65 
66             //在指定位置并且按指定大小绘制原图片的指定部分
67             g.DrawImage(originalImage, new Rectangle(00, towidth, toheight), 
68                 new Rectangle(x, y, ow,oh),
69                 GraphicsUnit.Pixel);
70 
71             try
72             {            
73                 //以jpg格式保存缩略图
74                 bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
75             }
76             catch(System.Exception e)
77             {
78                 throw e;
79             }
80             finally
81             {
82                 originalImage.Dispose();
83                 bitmap.Dispose();                        
84                 g.Dispose();
85             }
86         }

原文地址:https://www.cnblogs.com/feb9903/p/709234.html