生成缩略图
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 System.Drawing.Image originalImage = System.Drawing.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 System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
53
54 //新建一个画板
55 System.Drawing.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(System.Drawing.Color.Transparent);
65
66 //在指定位置并且按指定大小绘制原图片的指定部分
67 g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
68 new System.Drawing.Rectangle(x, y, ow, oh),
69 System.Drawing.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 }
87
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 System.Drawing.Image originalImage = System.Drawing.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 System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
53
54 //新建一个画板
55 System.Drawing.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(System.Drawing.Color.Transparent);
65
66 //在指定位置并且按指定大小绘制原图片的指定部分
67 g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
68 new System.Drawing.Rectangle(x, y, ow, oh),
69 System.Drawing.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 }
87