ASP.NET C# 按原图片大小等比例缩放生成缩略图

aspx页面




缩略图测试



原图:




缩略图:






cs页,以下这个缩略图函数生成后空白部分是用背景色填充的.
1. using System;
2. using System.Data;
3. using System.Configuration;
4. using System.Collections;
5. using System.Web;
6. using System.Web.Security;
7. using System.Web.UI;
8. using System.Web.UI.WebControls;
9. using System.Web.UI.WebControls.WebParts;
10. using System.Web.UI.HtmlControls;
11. public partial class test_test_img : System.Web.UI.Page
12. {
13. protected void Page_Load(object sender, EventArgs e)
14. {
15. //原图片路径
16. string source = Server.MapPath("~/images/Source/test1.jpg");
17. string type = "";
18. //获取原图片格式
19. string fileExtension = System.IO.Path.GetExtension(source).ToLower();
20. switch (fileExtension)
21. {
22. case ".gif": type = ".gif"; break;
23. case ".jpg": type = ".jpg"; break;
24. case ".bmp": type = ".bmp"; break;
25. case ".png": type = ".png"; break;
26. }
27. //缩略图保存位置和文件名,图片格式
28. string small = Server.MapPath("~/images/Small/Small_test"+type);
29. MakeThumbnail(source, small, 180,130);
30. Image1.ImageUrl = source;
31. Image2.ImageUrl = small;
32. }
33. /**/
34. /** 生成缩略图
35. /**
36. /** 源图路径(物理路径)
37. /** 缩略图路径(物理路径)
38. /** 缩略图宽度
39. /** 缩略图高度
40. public void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height)
41. {
42. //获取原始图片
43. System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
44. //缩略图画布宽高
45. int towidth = width;
46. int toheight = height;
47. //原始图片写入画布坐标和宽高(用来设置裁减溢出部分)
48. int x = 0;
49. int y = 0;
50. int ow = originalImage.Width;
51. int oh = originalImage.Height;
52. //原始图片画布,设置写入缩略图画布坐标和宽高(用来原始图片整体宽高缩放)
53. int bg_x = 0;
54. int bg_y = 0;
55. int bg_w = towidth;
56. int bg_h = toheight;
57. //倍数变量
58. double multiple = 0;
59. //获取宽长的或是高长与缩略图的倍数
60. if (originalImage.Width >= originalImage.Height) multiple = (double)originalImage.Width / (double)width;
61. else multiple = (double)originalImage.Height / (double)height;
62. //上传的图片的宽和高小等于缩略图
63. if (ow <= width && oh <= height)
64. {
65. //缩略图按原始宽高
66. bg_w = originalImage.Width;
67. bg_h = originalImage.Height;
68. //空白部分用背景色填充
69. bg_x = Convert.ToInt32(((double)towidth - (double)ow) / 2);
70. bg_y = Convert.ToInt32(((double)toheight - (double)oh) / 2);
71. }
72. //上传的图片的宽和高大于缩略图
73. else
74. {
75. //宽高按比例缩放
76. bg_w = Convert.ToInt32((double)originalImage.Width / multiple);
77. bg_h = Convert.ToInt32((double)originalImage.Height / multiple);
78. //空白部分用背景色填充
79. bg_y = Convert.ToInt32(((double)height - (double)bg_h) / 2);
80. bg_x = Convert.ToInt32(((double)width - (double)bg_w) / 2);
81. }
82. //新建一个bmp图片,并设置缩略图大小.
83. System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
84. //新建一个画板
85. System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
86. //设置高质量插值法
87. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
88. //设置高质量,低速度呈现平滑程度
89. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
90. //清空画布并设置背景色
91. g.Clear(System.Drawing.ColorTranslator.FromHtml("#F2F2F2"));
92. //在指定位置并且按指定大小绘制原图片的指定部分
93. //第一个System.Drawing.Rectangle是原图片的画布坐标和宽高,第二个是原图片写在画布上的坐标和宽高,最后一个参数是指定数值单位为像素
94. g.DrawImage(originalImage, new System.Drawing.Rectangle(bg_x, bg_y, bg_w, bg_h), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
95. try
96. {
97. //获取图片类型
98. string fileExtension = System.IO.Path.GetExtension(originalImagePath).ToLower();
99. //按原图片类型保存缩略图片,不按原格式图片会出现模糊,锯齿等问题.
100. switch (fileExtension)
101. {
102. case ".gif": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif); break;
103. case ".jpg": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); break;
104. case ".bmp": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp); break;
105. case ".png": bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png); break;
106. }
107. }
108. catch (System.Exception e)
109. {
110. throw e;
111. }
112. finally
113. {
114. originalImage.Dispose();
115. bitmap.Dispose();
116. g.Dispose();
117. }
118. }
119. }

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/631872/viewspace-1049781/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/631872/viewspace-1049781/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值