缩略图通常是将图片内容进行一定的缩小展现,或裁剪展现,主要有两个目的,一是提供一定的预览功能,二是节省屏幕展示空间、节省流量。
在网站中我们通常运用在商品的列表,比如商城、图书、新闻等等列表的图片。在C#中我们如何生成缩略图呢,也就是缩小图片,下面我们来看一看如何缩小图片。

其中方法参数如下:
originalImagePath:源图路径(物理路径)
thumbnailPath:缩略图路径(物理路径)
width:生成缩略图宽度
height:生成缩略图高度
mode:生成缩略图的模式

代码如下

public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode){System.Drawing.Image img_OriginalImage = null;ImageFormat tFormat = null;try{img_OriginalImage = (Bitmap)System.Drawing.Image.FromFile(originalImagePath);tFormat = img_OriginalImage.RawFormat;}catch (Exception ex){if (img_OriginalImage != null){img_OriginalImage.Dispose();}throw new Exception("压缩图片:" + originalImagePath + "失败!\r\n" + ex.Message);}int i_ToWidth = width;int i_ToHeight = height;int x = 0;int y = 0;int i_OriginalWidth = img_OriginalImage.Width;int i_OriginalHeight = img_OriginalImage.Height;switch (mode){case ThumbnailMode.Width:i_ToHeight = img_OriginalImage.Height * width / img_OriginalImage.Width;break;case ThumbnailMode.Height:i_ToWidth = img_OriginalImage.Width * height / img_OriginalImage.Height;break;case ThumbnailMode.Cut:if ((double)img_OriginalImage.Width / (double)img_OriginalImage.Height > (double)i_ToWidth / (double)i_ToHeight){i_OriginalHeight = img_OriginalImage.Height;i_OriginalWidth = img_OriginalImage.Height * i_ToWidth / i_ToHeight;y = 0;x = (img_OriginalImage.Width - i_OriginalWidth) / 2;}else{i_OriginalWidth = img_OriginalImage.Width;i_OriginalHeight = img_OriginalImage.Width * height / i_ToWidth;x = 0;y = (img_OriginalImage.Height - i_OriginalHeight) / 2;}break;default:break;}//新建一个BMP图片System.Drawing.Image img_BitMap = new System.Drawing.Bitmap(i_ToWidth, i_ToHeight);//新建一个画板System.Drawing.Graphics gp = Graphics.FromImage(img_BitMap);//设置高质量插值法gp.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;//设置高质量、低速度呈现平滑程度gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;gp.CompositingQuality = CompositingQuality.HighQuality;//清空画布并以透明背景色填充gp.Clear(Color.Transparent);//指定位置并按大小绘制原图片的指定部分gp.DrawImage(img_OriginalImage, new Rectangle(0, 0, i_ToWidth, i_ToHeight), new Rectangle(x, y, i_OriginalWidth, i_OriginalHeight), GraphicsUnit.Pixel);try{EncoderParameters ep = new EncoderParameters();long[] qy = new long[1];qy[0] = 100;//设置压缩的比例1-100  EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);ep.Param[0] = eParam;ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();ImageCodecInfo jpegICIinfo = null;for (int i = 0; i < arrayICI.Length; i++){if (arrayICI[i].FormatDescription.Equals("JPEG")){jpegICIinfo = arrayICI[i];break;}}if (jpegICIinfo != null && Equals(tFormat, ImageFormat.Jpeg)){//以JPG格式保存图片img_BitMap.Save(thumbnailPath, jpegICIinfo, ep);//Const.iSuccessCount++;}else{img_BitMap.Save(thumbnailPath, tFormat);//Const.iSuccessCount++;}}catch (Exception ex){Console.WriteLine("复制图片:" + originalImagePath + "失败!\r\n" + ex.Message + ex.StackTrace);}finally{if (img_OriginalImage != null){img_OriginalImage.Dispose();}if (img_BitMap != null){img_BitMap.Dispose();}if (gp != null){gp.Dispose();}//GC.Collect();}}
public enum ThumbnailMode{/// <summary>/// 指定宽度,高度按照比例缩放/// </summary>Width = 0,/// <summary>/// 指定高度,宽度按照比例缩放/// </summary>Height = 1,/// <summary>/// 按照指定的高度和宽度剪裁/// </summary>Cut = 2,/// <summary>/// 指定宽度,高度按照比例缩放/// </summary>None = 3}
  • 在该方法中我们首先使用(Bitmap)System.Drawing.Image.FromFile将文件加载到bitmap。
  • 根据mode传入的压缩模式进行原始绘图区域的计算。
  • 将计算出的区域绘制到新的BitMap。
  • 将绘制的BitMap图片保存到指定文件。

通过如上的几步就完成了缩略图的生成。

C#图片处理如何生成缩略图相关推荐

  1. java 程序实现对图片的压缩生成缩略图并可设定长宽、尺寸压缩率、图片质量

    转载自  java 程序实现对图片的压缩生成缩略图并可设定长宽.尺寸压缩率.图片质量 之前是在另一位高手的上传内容中学习到的,并将其代码根据我的需求进行了修改,参考位置:http://jiangpin ...

  2. php imagick 缩略图,PHP Imagick完美实现图片裁切、生成缩略图、添加水印,

    PHP Imagick完美实现图片裁切.生成缩略图.添加水印, 本文实例讲解了PHP使用Imagick 裁切.生成缩略图.添加水印自动检测和处理,支持gif,分享给大家供大家参考,具体内容如下 调用方 ...

  3. PHP图片裁剪_图片缩放_PHP生成缩略图

    2019独角兽企业重金招聘Python工程师标准>>> 在制作网页过程中,为了排版整齐美观,对网页中的图片处理成固定大小尺寸的图片,或是要截去图片边角中含有水印的图片,对于图片量多, ...

  4. php图片制作源码,php进行图片裁剪及生成缩略图程序源代码

    我们经常会遇到对图像进行裁剪动作,下面这段代码就是裁剪的源码 处理方法是: 1.当原图的宽或高任一比规定的尺寸小,只进行等比缩略处理, 2.当原图的宽与高都比规定尺寸大,先进行等比缩略处理,然后算出居 ...

  5. php 缩略图增加水印,PHP生成缩略图加图片水印代码

    一个PHP图片加水印, 生成缩略图类,觉得注释的挺清楚,与大家分享,如果想为你的PHP程序添加图片水印或者生成缩略图的话,应该是个不错的选择. PHP生成缩略图加图片水印代码<?php // 原 ...

  6. php显示图片缩略图,使用ThinkPHP生成缩略图及显示的方法

    这篇文章主要为大家详细介绍了使用ThinkPHP生成缩略图及显示的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 使用ThinkPHP生成缩略图及显示,具有一定的参考价值,感兴趣的小伙伴们 ...

  7. 如何使用Java快速地给图片转码和生成缩略图(Thumbnailator和webp-imageio-core的使用)

    文章简介 本文中介绍,如何使用Java优雅处理图片:包括:主流图片格式转码.图片压缩(缩略图生成)等.主要用到的外部工具包: Google Thumbnailator webp-imageio-cor ...

  8. 使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图

    本文借助vs2005中自带的FileUpload控件实现图片文件的上传并生成缩略图. 实现过程:选择图片上传成功后,取得已经存在服务器的文件生成缩略图,并且判断是否是图片类型的文件,这个的判断可以在程 ...

  9. php裁剪图片白边,php生成缩略图填充白边(等比缩略图方案)

    网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120.但是如果上传的图片比例和缩略图不一致,直接缩放 ...

最新文章

  1. 表面积最小(POJ3536)
  2. Map.keyset()
  3. matlab路面,赛道道路路况分析问题 matlab高手进下
  4. 微信小程序中嵌套html_微信小程序:web-view嵌套H5实现微信支付功能解决方案及填坑...
  5. [Qt教程] 第29篇 XML(三)Qt中的SAX
  6. iOS工作笔记之NSClassFromString
  7. 打开cmd窗口新技巧get
  8. 找不到天隆虚拟机_玩转虚拟机,教你如何装系统
  9. 【Python3网络爬虫开发实战】1.2.1-Requests的安装
  10. vue ---- 指令综合案例
  11. Java程序设计语言基础05:Java的类和对象
  12. 利用BioPerl将DNA序列翻译成蛋白序列
  13. 去除主页ImageView图片的上下空白
  14. Jmeter集成Jira提交缺陷
  15. 开源跨平台的Fuchsia操作系统
  16. PS 矩形工具的使用
  17. 手把手带撸Junior AlphaGo算法「AI工程论」
  18. 换个角度想问题,不再孤单
  19. 腾讯2016实习生招聘有感
  20. QT常用函数和总结(持续更新)

热门文章

  1. linaro linaro-alip login: root (automatic login)
  2. linux下使用mysql
  3. 服务器更换硬盘要重装系统,电脑更换新硬盘后要怎么重装系统
  4. 小写金额变中文大写和英文方法总结
  5. 软件项目管理 8.1.软件质量基本概念
  6. 招聘求职小程序V4.1.87源码-修复后台里推广企业无法确认收益问题
  7. 【神经网络】学习笔记十五——训练集,验证集和测试集
  8. 奋斗就是每一天都很难,但一年一年却越来越容易;不奋斗就是每天都很容易,但一天一天却越来越难
  9. jeecgboot入手
  10. [转载]项目风险管理七种武器-碧玉刀