/// <summary>/// 生成缩略图/// </summary>/// <param name="maxWidth">生成的缩略图最大宽度</param>/// <param name="maxHeight">生成的缩略图最大高度</param>/// <param name="imgFileStream">图片文件流对象</param>/// <param name="savePath">文件保存路径</param>/// <param name="imgFormat">生成图片的格式</param>public void GenerateThumbnail(int maxWidth, int maxHeight, System.IO.Stream imgFileStream, string savePath,System.Drawing.Imaging.ImageFormat imgFormat){using (var img = System.Drawing.Image.FromStream(imgFileStream)){var sourceWidth = img.Width;var sourceHeight = img.Height;var thumbWidth = sourceWidth; //要生成的缩略图的宽度var thumbHeight = sourceHeight; //要生成的缩略图的高度//计算生成图片的高度和宽度if (sourceWidth > maxWidth || sourceHeight > maxHeight){var rateWidth = (double)sourceWidth / maxWidth;var rateHeight = (double)sourceHeight / maxHeight;if (rateWidth > rateHeight){thumbWidth = maxWidth;thumbHeight = (int)Math.Round(sourceHeight / rateWidth);}else{thumbWidth = (int)Math.Round(sourceWidth / rateHeight);thumbHeight = maxHeight;}}using (var bmp = new System.Drawing.Bitmap(thumbWidth, thumbHeight)){//从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。using (var gr = System.Drawing.Graphics.FromImage(bmp)){//设置 System.Drawing.Graphics对象的SmoothingMode属性为HighQualitygr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//下面这个也设成高质量gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;//下面这个设成Highgr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;//把原始图像绘制成上面所设置宽高的缩小图var rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight);gr.DrawImage(img, rectDestination, 0, 0, sourceWidth, sourceHeight,System.Drawing.GraphicsUnit.Pixel);//保存图像bmp.Save(savePath, imgFormat);}}}}

调用很简单如下

        protected void Button4_Click(object sender, EventArgs e){GenerateThumbnail(500, 500, FileUpload1.PostedFile.InputStream, "d:/1.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);}

高质量图片缩略图生成(编程笔记)相关推荐

  1. 响应式编程笔记(二):代码编写

    2019独角兽企业重金招聘Python工程师标准>>> 响应式编程笔记(二):代码编写 博客分类: 架构 原文:Notes on Reactive Programming Part ...

  2. NDK 高级编程(笔记)

    Android 开发中针对 NDK 的书籍很少,<Pro Android C++ with the NDK>也是出版的比较早的一本书,有些内容可能对现在的开发并不适用.但是书中介绍的内容比 ...

  3. Java编程笔记7:内部类

    Java编程笔记7:内部类 图源:PHP中文网 所谓的内部类,其实就是定义在类中的类.这和Java编程笔记6:接口 - 魔芋红茶's blog (icexmoon.xyz)中提到的接口嵌套的方式有点相 ...

  4. Java编程笔记16:深入容器

    Java编程笔记16:深入容器 图源:PHP中文网 填充容器 填充容器会有Java编程笔记15:数组 - 魔芋红茶's blog (icexmoon.cn)种提到的填充数组同样的问题. 和数组类似,标 ...

  5. Java编程笔记2:初始化和清理

    Java编程笔记2:初始化和清理 图源:Java Switch语句(用法详解)-java教程-PHP中文网 构造器 构造器,在编程领域也会被称作构造函数.事实上我觉得这个名称并不是很恰当,可能相当一部 ...

  6. Java编程笔记9:容器(下)

    Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...

  7. Go语言编程笔记16:存储数据

    Go语言编程笔记16:存储数据 图源:wallpapercave.com 几乎任何程序都绕不开读写数据,只不过具体的数据存储介质和方式有所不同.本篇文章将从多种数据存储方式进行探讨各种存储方式如何实现 ...

  8. C# 求取圆心/球心坐标 ∈ C# 编程笔记

    [日志] 最新版本见于"整个源码"部分,其他部分还是首发代码. 6.12 首发此篇博客,球心坐标算法有问题待解决 6.21 优化了代码:求圆心算法简化了一下:求心前先重心化,计算的 ...

  9. labview编程笔记之条件结构

    CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程.这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路.学习之乐,独乐乐,不如众乐 ...

  10. python核心编程笔记

    python核心编程–笔记(? 解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找python路径 ...

最新文章

  1. webuploader上传文件,后台Java接收
  2. Python生物信息学③提取差异基因
  3. ASP.NET中数据缓存
  4. struct和class内存大小的计算
  5. 大数据量表中,增加一个NOT NULL的新列
  6. JUC多线程核心知识-思维导图
  7. C++中的对象_纪要(二)
  8. hive操作create,alter等
  9. 操作系统--中断和异常
  10. 《金色梦乡》金句摘抄(六)
  11. 移动端页面字体在微信被放大,导致排版错乱
  12. tracepro杂散光分析例子_AES分析中的干扰效应及校正,你知道吗?
  13. 数学建模之案例学习1——企业营销额问题
  14. 制作符合期刊审图号标准的中国地图(含九段线)
  15. Excel下拉选项设置
  16. MT6573_FlashTool 下载的使用说明
  17. 从罗马帝国精英军团/秦帝国军制谈iOS/Android
  18. 软件工程与计算:第3章需求分析 测试
  19. 矩特征、几何矩的定义
  20. cocos2d-x3.x 游戏手柄

热门文章

  1. 计算机总是重启是怎么回事,电脑老是重启怎么办?重启原因分析及解决方法
  2. fiddler4请求拒绝原因
  3. JQuery所有版本及说明文档
  4. 4款时尚优雅宋体Logo字体(可免费商用)
  5. WGS-84与北京-54、西安-80及地方坐标系的转换
  6. nginx部署前端代码 负载均衡
  7. Bat 无限弹窗(慎用)
  8. matlab 不确定度计算器,A类贝塞尔不确定度计算器下载
  9. Python3 发票导出XML转Excel
  10. 调试ST电机库5.20遇到的问题