高质量图片缩略图生成(编程笔记)
/// <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);}
高质量图片缩略图生成(编程笔记)相关推荐
- 响应式编程笔记(二):代码编写
2019独角兽企业重金招聘Python工程师标准>>> 响应式编程笔记(二):代码编写 博客分类: 架构 原文:Notes on Reactive Programming Part ...
- NDK 高级编程(笔记)
Android 开发中针对 NDK 的书籍很少,<Pro Android C++ with the NDK>也是出版的比较早的一本书,有些内容可能对现在的开发并不适用.但是书中介绍的内容比 ...
- Java编程笔记7:内部类
Java编程笔记7:内部类 图源:PHP中文网 所谓的内部类,其实就是定义在类中的类.这和Java编程笔记6:接口 - 魔芋红茶's blog (icexmoon.xyz)中提到的接口嵌套的方式有点相 ...
- Java编程笔记16:深入容器
Java编程笔记16:深入容器 图源:PHP中文网 填充容器 填充容器会有Java编程笔记15:数组 - 魔芋红茶's blog (icexmoon.cn)种提到的填充数组同样的问题. 和数组类似,标 ...
- Java编程笔记2:初始化和清理
Java编程笔记2:初始化和清理 图源:Java Switch语句(用法详解)-java教程-PHP中文网 构造器 构造器,在编程领域也会被称作构造函数.事实上我觉得这个名称并不是很恰当,可能相当一部 ...
- Java编程笔记9:容器(下)
Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...
- Go语言编程笔记16:存储数据
Go语言编程笔记16:存储数据 图源:wallpapercave.com 几乎任何程序都绕不开读写数据,只不过具体的数据存储介质和方式有所不同.本篇文章将从多种数据存储方式进行探讨各种存储方式如何实现 ...
- C# 求取圆心/球心坐标 ∈ C# 编程笔记
[日志] 最新版本见于"整个源码"部分,其他部分还是首发代码. 6.12 首发此篇博客,球心坐标算法有问题待解决 6.21 优化了代码:求圆心算法简化了一下:求心前先重心化,计算的 ...
- labview编程笔记之条件结构
CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程.这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路.学习之乐,独乐乐,不如众乐 ...
- python核心编程笔记
python核心编程–笔记(? 解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找python路径 ...
最新文章
- webuploader上传文件,后台Java接收
- Python生物信息学③提取差异基因
- ASP.NET中数据缓存
- struct和class内存大小的计算
- 大数据量表中,增加一个NOT NULL的新列
- JUC多线程核心知识-思维导图
- C++中的对象_纪要(二)
- hive操作create,alter等
- 操作系统--中断和异常
- 《金色梦乡》金句摘抄(六)
- 移动端页面字体在微信被放大,导致排版错乱
- tracepro杂散光分析例子_AES分析中的干扰效应及校正,你知道吗?
- 数学建模之案例学习1——企业营销额问题
- 制作符合期刊审图号标准的中国地图(含九段线)
- Excel下拉选项设置
- MT6573_FlashTool 下载的使用说明
- 从罗马帝国精英军团/秦帝国军制谈iOS/Android
- 软件工程与计算:第3章需求分析 测试
- 矩特征、几何矩的定义
- cocos2d-x3.x 游戏手柄