01. // <summary>
02. /// 生成缩略图
03. /// </summary>
04. /// <param name="originalImagePath">源图路径</param>
05. /// <param name="thumbnailPath">缩略图路径</param>
06. /// <param name="width">缩略图宽度</param>
07. /// <param name="height">缩略图高度</param>
08. /// <param name="mode">生成缩略图的方式:HW指定高宽缩放(可能变形);W指定宽,高按比例 H指定高,宽按比例 Cut指定高宽裁减(不变形)</param>
09. /// <param name="mode">要缩略图保存的格式(gif,jpg,bmp,png) 为空或未知类型都视为jpg</param>
10. public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode, string imageType)
11. {
12. Image originalImage = Image.FromFile(originalImagePath);
13. int towidth = width;
14. int toheight = height;
15. int x = 0;
16. int y = 0;
17. int ow = originalImage.Width;
18. int oh = originalImage.Height;
19.20. switch (mode)
21. {
22. case "HW"://指定高宽缩放(可能变形)
23. break;
24. case "W"://指定宽,高按比例
25. toheight = originalImage.Height * width / originalImage.Width;
26. break;
27. case "H"://指定高,宽按比例
28. towidth = originalImage.Width * height / originalImage.Height;
29. break;
30. case "Cut"://指定高宽裁减(不变形)
31. if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
32. {
33. oh = originalImage.Height;
34. ow = originalImage.Height * towidth / toheight;
35. y = 0;
36. x = (originalImage.Width - ow) / 2;
37. }
38. else
39. {
40. ow = originalImage.Width;
41. oh = originalImage.Width * height / towidth;
42. x = 0;
43. y = (originalImage.Height - oh) / 2;
44. }
45. break;
46. default:
47. break;
48. }
49. //新建一个bmp图片
50. Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
51.52. //新建一个画板
53. Graphics g = System.Drawing.Graphics.FromImage(bitmap);
54.55. //设置高质量插值法
56. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
57.58. //设置高质量,低速度呈现平滑程度
59. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
60.61. //清空画布并以透明背景色填充
62. g.Clear(Color.Transparent);
63.64. //在指定位置并且按指定大小绘制原图片的指定部分
65. g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
66. new Rectangle(x, y, ow, oh),
67. GraphicsUnit.Pixel);
68.69. try
70. {
71. //以jpg格式保存缩略图
72. switch (imageType.ToLower())
73. {
74. case "gif":
75. bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);
76. break;
77. case "jpg":
78. bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
79. break;
80. case "bmp":
81. bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);
82. break;
83. case "png":
84. bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);
85. break;
86. default:
87. bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
88. break;
89. }
90. }
91. catch (System.Exception e)
92. {
93. throw e;
94. }
95. finally
96. {
97. originalImage.Dispose();
98. bitmap.Dispose();
99. g.Dispose();
100. }
101. }
相关文章
- 09-23基于Doxygen_C语言代码文档一键生成的记录与规范(嵌入式适用)
- 09-23在运行程序时报错:"如果在 Code First 模式下使用,则使用 T4 模板为 Database First 和 Model First 开发生成的代码可能无法 正常运行。若要继续使用 Database First 或 Model First,请确保在执行应用程序的 config 文件中指 定 Entity Framework 连接字符串。若要将这些从 Database First 或 Mod
- 09-23DTO代码自动生成器的入门 DTOHelper
- 09-23代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值?
- 09-23图的最短路径(Dijkstra)(Floyd),拓扑排序,生成树代码
- 09-23idea 快速生成代码的快捷键
- 09-23自定义snippet(代码段)就可以极大的提高你的开发效率 VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
- 09-23yolov3中生成网络输入数据格式的voc_lable.py文件代码解读(笔记)
- 09-23在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定
- 09-23如何在netbeans中更改不可编辑/生成的代码