C#实现缩略图简单分析

开发 后端
这里介绍C#实现缩略图,以前,在页面上C#实现缩略图必须借助第三方组件。现在,有了.NET,就可以很轻松地C#实现缩略图。

C#语言有很多值得学习的地方,这里我们主要介绍C#实现缩略图,包括介绍C#实现缩略图必须借助第三方组件等方面。

以前,在页面上C#实现缩略图必须借助第三方组件。现在,有了.NET,就可以很轻松地C#实现缩略图。

下面就是C#实现缩略图的例子。

  1. using System;  
  2. using System.Collections;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Web;  
  7. using System.Web.SessionState;  
  8. using System.Web.UI;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.HtmlControls;  
  11. using System.Drawing.Imaging;  
  12. namespace Exam_C  
  13. {  
  14. /// <summary> 
  15. /// ToThumbnailImage 的摘要说明。  
  16. /// </summary> 
  17. public class ToThumbnailImage : System.Web.UI.Page  
  18. {  
  19. /*  
  20. Create By lion  
  21. 2003-05-20 19:00  
  22. Copyright (C) 2004 www.LionSky.Net. All rights reserved.  
  23. Web: http://www.Lionsky.net ;  
  24. Email: lion-a@sohu.com  
  25. */  
  26.  
  27. static Hashtable htmimes=new Hashtable();  
  28. internal readonly string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp";  
  29.  
  30. #region Web 窗体设计器生成的代码  
  31. override protected void OnInit(EventArgs e)  
  32. {  
  33. #region htmimes[".jpe"]="image/jpeg";  
  34. htmimes[".jpeg"]="image/jpeg";  
  35. htmimes[".jpg"]="image/jpeg";  
  36. htmimes[".png"]="image/png";  
  37. htmimes[".tif"]="image/tiff";  
  38. htmimes[".tiff"]="image/tiff";  
  39. htmimes[".bmp"]="image/bmp";  
  40. #endregion  
  41. //调用生成缩略图方法  
  42. ToThumbnailImages("lionsky.jpg","b.gif",300);  
  43. }  
  44. #endregion  
  45.  
  46. #region Helper  
  47.  
  48. /// <summary> 
  49. /// 获取图像编码解码器的所有相关信息  
  50. /// </summary> 
  51. /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param> 
  52. /// <returns>返回图像编码解码器的所有相关信息</returns> 
  53. static ImageCodecInfo GetCodecInfo(string mimeType)  
  54. {  
  55. ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();  
  56. foreach(ImageCodecInfo ici in CodecInfo)  
  57. {  
  58. if(ici.MimeType == mimeType)return ici;  
  59. }  
  60. return null;  
  61. }  
  62.  
  63. /// <summary> 
  64. /// 检测扩展名的有效性  
  65. /// </summary> 
  66. /// <param name="sExt">文件名扩展名</param> 
  67. /// <returns>如果扩展名有效,返回true,否则返回false.</returns> 
  68. bool CheckValidExt(string sExt)  
  69. {  
  70. bool flag=false;  
  71. string[] aExt = AllowExt.Split(''|'');  
  72. foreach(string filetype in aExt)  
  73. {  
  74. if(filetype.ToLower()==sExt)  
  75. {  
  76. flag = true;  
  77. break;  
  78. }  
  79. }  
  80. return flag;  
  81. }  
  82.  
  83. /// <summary> 
  84. /// 保存图片  
  85. /// </summary> 
  86. /// <param name="image">Image 对象</param> 
  87. /// <param name="savePath">保存路径</param> 
  88. /// <param name="ici">指定格式的编解码参数</param> 
  89. void SaveImage(System.Drawing.Image image,string savePath,ImageCodecInfo ici)  
  90. {  
  91. //设置 原图片 对象的 EncoderParameters 对象  
  92. EncoderParameters parameters = new EncoderParameters(1);  
  93. parameters.Param[0] = new EncoderParameter(Encoder.Quality, ((long) 90));  
  94. image.Save(savePath, ici, parameters);  
  95. parameters.Dispose();  
  96. }  
  97. #endregion  
  98.  
  99. #region Methods  
  100.  
  101. /// <summary> 
  102. /// 生成缩略图  
  103. /// </summary> 
  104. /// <param name="sourceImagePath">原图片路径(相对路径)</param> 
  105. /// <param name="thumbnailImagePath">生成的缩略图路径,
    如果为空则保存为原图片路径(相对路径)
    </param> 
  106. /// <param name="thumbnailImageWidth">
    缩略图的宽度(高度与按源图片比例自动生成)</param> 
  107. public void ToThumbnailImages(string sourceImagePath,
    string thumbnailImagePath,int thumbnailImageWidth)  
  108. {  
  109. string SourceImagePath = sourceImagePath;  
  110. string ThumbnailImagePath = thumbnailImagePath;  
  111. int ThumbnailImageWidth = thumbnailImageWidth;  
  112. string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();  
  113. if(SourceImagePath.ToString()==System.String.Empty) 
    throw new NullReferenceException("SourceImagePath is null!");  
  114. if(!CheckValidExt(sExt))  
  115. {  
  116. throw new ArgumentException
    ("原图片文件格式不正确,支持的格式有[ "+ AllowExt +" ]","SourceImagePath");  
  117. }  
  118. //从 原图片 创建 Image 对象  
  119. System.Drawing.Image image = System.Drawing.Image.FromFile
    (HttpContext.Current.Server.MapPath(SourceImagePath));  
  120. int num = ((ThumbnailImageWidth / 4) * 3);  
  121. int width = image.Width;  
  122. int height = image.Height;  
  123. //计算图片的比例  
  124. if ((((double) width) / ((double) height)) >= 1.3333333333333333f)  
  125. {  
  126. num = ((height * ThumbnailImageWidth) / width);  
  127. }  
  128. else  
  129. {  
  130. ThumbnailImageWidth = ((width * num) / height);  
  131. }  
  132. if ((ThumbnailImageWidth < 1) || (num < 1))  
  133. {  
  134. return;  
  135. }  
  136. //用指定的大小和格式初始化 Bitmap 类的新实例  
  137. Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);  
  138. //从指定的 Image 对象创建新 Graphics 对象  
  139. Graphics graphics = Graphics.FromImage(bitmap);  
  140. //清除整个绘图面并以透明背景色填充  
  141. graphics.Clear(Color.Transparent);  
  142. //在指定位置并且按指定大小绘制 原图片 对象  
  143. graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));  
  144. image.Dispose();  
  145. try  
  146. {  
  147. //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件  
  148. string savepath = (ThumbnailImagePath==null?SourceImagePath:ThumbnailImagePath);  
  149. SaveImage(bitmap,HttpContext.Current.Server.MapPath(savepath),
    GetCodecInfo((string)htmimes[sExt]));  
  150. }  
  151. catch(System.Exception e)  
  152. {  
  153. throw e;  
  154. }  
  155. finally  
  156. {  
  157. bitmap.Dispose();  
  158. graphics.Dispose();  
  159. }  
  160. }  
  161. #endregion  
  162.  
  163. }  
  164. }  

【编辑推荐】

  1. C#字符ASCII码学习经验
  2. C#数值类型之间的转换概述
  3. 日期型数据转换成C#长整型数据
  4. C#查看Excel对象模型分析
  5. C#日期型数据简单剖析
责任编辑:佚名 来源: cnblogs
相关推荐

2013-08-12 15:26:49

测试

2013-12-02 15:07:57

jQuery插件

2009-10-26 17:38:22

VB.NET实现缩略图

2012-07-18 20:59:40

jQuery

2019-02-15 14:00:57

Linux命令缩略图

2009-12-07 11:21:59

PHP生成缩略图

2009-08-12 16:33:37

.NET生成缩略图

2009-08-28 10:22:13

Windows 7系统故障应对缩略图无法显示

2012-01-10 14:59:42

jQuery

2010-01-20 10:29:37

Chrome缩略图标签管理

2011-07-01 11:18:50

Qt 多线程

2012-09-20 15:00:38

Win 8操作系统

2022-02-21 16:38:19

Serverless图片视频

2020-11-02 14:49:46

GitHub Java图片

2009-09-02 18:03:19

C#实现泛型类

2023-05-15 17:04:33

Edge浏览器

2011-02-21 16:11:45

C#.NET.NET framew

2021-07-01 14:52:17

Windows 11操作系统微软

2010-04-07 09:28:29

Chrome缩略图

2009-09-01 17:32:04

C#版本控制
点赞
收藏

51CTO技术栈公众号