C# 生成高清缩略图
对于GDI+,在正常的操作,Bitmap-- Graphcis -- DrawImage或者DrawString ,生成图片的话,会产生很多杂点,或者是图片质量不稳定..尤其是在读取图片后,生成缩略图之后,文件会被压缩而失真..
主要原因是因为没有重新设置Graphics的几个属性..
1.Graphics.SmoothingMode属性: 例如SmoothingMode.HighQuality可以产生高质量图片,但是效率低.
2.Graphics.CompositingQuality 属性: 例如:CompositingQuality.HighQuality也是产生高质量图,效率低下.
3.Graphics.InterpolationMode 属性,例如:InterpolationMode.HighQualityBicubic与前两个也是同样的效果.
这三个属性的值都是enum,具体的enum参数可以查看MSDN的说明..在这里就我不赘述..
如果是对图片进行放大,缩小,可以调整Graphics.CompositingQuality 和Graphics.InterpolationMode 两个属性..如果是图片生成,则可以调整Graphics.SmoothingMode属性
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="fileName">原图路径</param>
/// <param name="newFile">缩略图路径</param>
/// <param name="maxHeight">最大高度</param>
/// <param name="maxWidth">最大宽度</param>
public string ThumbnailImage(string fileName, string newFile, int maxHeight, int maxWidth)
{System.Drawing.Image img = System.Drawing.Image.FromFile(fileName);System.Drawing.Imaging.ImageFormat thisFormat = img.RawFormat;//缩略图尺寸double w = 0.0;double h = 0.0;double sw = Convert.ToDouble(img.Width);double sh = Convert.ToDouble(img.Height);double mw = Convert.ToDouble(maxWidth);double mh = Convert.ToDouble(maxHeight);if (sw < mw && sh < mh){w = sw;h = sh;}else if ((sw / sh) > (mw / mh)){w = maxWidth;h = (w * sh) / sw;}else{h = maxHeight;w = (h * sw) / sh;}Size newSize = new Size(Convert.ToInt32(w), Convert.ToInt32(h));Bitmap outBmp = new Bitmap(newSize.Width, newSize.Height);Graphics g = Graphics.FromImage(outBmp);//设置画布的描绘质量g.CompositingQuality = CompositingQuality.HighQuality;g.SmoothingMode = SmoothingMode.HighQuality;g.InterpolationMode = InterpolationMode.HighQualityBicubic;g.DrawImage(img, new Rectangle(0, 0, newSize.Width, newSize.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);g.Dispose();//以下代码为保存图片时,设置压缩质量EncoderParameters encoderParams = new EncoderParameters();long[] quality = new long[1];quality[0] = 100;EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);encoderParams.Param[0] = encoderParam;//获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();ImageCodecInfo jpegICI = null;for (int x = 0; x < arrayICI.Length;x++){if (arrayICI[x].FormatDescription.Equals("JPEG")){jpegICI = arrayICI[x];//设置JPEG编码break;}}if (jpegICI != null){Bitmap newbit = new Bitmap(outBmp);newbit.Save(newFile, jpegICI, encoderParams);}else{outBmp.Save(newFile,thisFormat);}img.Dispose();outBmp.Dispose();return newFile;
}
转载于:https://www.cnblogs.com/meishita/p/3509231.html
C# 生成高清缩略图相关推荐
- 生成高清缩略图; 添加图片、文字水印; 图片、文字水印透明
之前写了一个公共的ImgHelper类,主要提供高清晰缩略图生成,由于在之前的实际操作过程中存在一些问题,最近有了点时间,于是重新拾起来再改进一下,顺便研究一下GDI+. 问题一:产品搜索列表展示,每 ...
- php生成高清缩略图,PHP生成缩略图函数
/** * 生成缩略图 * @author [email protected] * @param string 源图绝对完整地址{带文件名及后缀名} * @param string 目标图绝对完整地址 ...
- 视频转GIF太模糊了吗?我来教你使用FFmpeg生成高清GIF!!!
有钱能使鬼推磨,昨天40多个阅读,没有一个人给我实在是太惨了,所以,再来个第二弹吧! 那么这次的主题,就是教你如何通过视频生成高清的GIF图片!! 恩,素材就用上次的那个动态收款码吧! 使用FFmpe ...
- [计算机视觉] 手把手教你如何生成高清的AprilTag
官方提供的AprilTag 3系列的所有标签的图像:https://github.com/AprilRobotics/apriltag-imgs 但是当我克隆下来以后,发现里面的AprilTag标签图 ...
- 使用FFmpeg生成高清gif图
前言 使用FFmpeg能够很方便的给视频片段或GIF加水印,同时还能对选取的片段生成GIF图,但是在使用默认FFmpeg设置情况下,生成的GIF画质很差,有很明显的栅格化现象.如何生成高质量的GIF是 ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)...
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
- Stable Diffusion 生成高清图片
Stable Diffusion 生成 8K 高清图片 0. 简介 1. 安装 ultimate-upscale-for-automatic1111 插件 2. 安装 4x-UltraSharp 模型 ...
- Asp.Net 上传图片并生成高清晰缩略图
在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...
- 生死看淡,不服就GAN(九)----英伟达力作PGGAN实战,生成高清图片
一.前言 2017年,NVIDIA Research 网站发布了一篇颇为震撼的GAN论文:Progressive Growing of GANs for Improved Quality, Stabi ...
- 斗破苍穹-云韵 AI生成高清大图
1080*1920高清大图,1000张,人工智能机器学习生成的AI高清古装仙侠美女图,云岚宗宗主云韵. 云韵,天蚕土豆所著异世大陆类玄幻小说<斗破苍穹>及其衍生作品中的角色,曾化名云芝.加 ...
最新文章
- vue进行判断使用class_vue如何判断dom的class
- 全卷积网络的理解——理解论文Fully Convolutional Networks for Semantic Segmentation
- MATLAB从入门到精通-Matlab R2020b新功能 | 子标题和标题/标签对齐功能!
- 魅族16Android版本,丝滑流畅?魅族16即将适配MIUI10/安卓9系统
- 制作可以自动隐藏的弹出式菜单
- Druid 数据源连接池配置
- python把数据写入excel_Python向excel中写入数据的方法
- c语言编写一个函数判断闰年,C语言:实现一个函数判断year是不是闰年
- 疑问:当流量被封禁之后(论资本之力):防流量被恶意盗挖(抛砖篇)
- oracle发生重启动的介绍
- 淋雨量matlab,淋雨量数学模型
- [转]Git详解之三 Git分支
- Win11快速截屏的4种方法介绍
- oracle数据库max使用,Oracle / PLSQL MAX函数
- cmos逻辑门传输延迟时间_什么是TTL电平、CMOS电平?区别是什么?
- stm32 jlink Unexceped core id found 0x00000000,excepted 0X3BA00477,MASK 0XFFFFFFFF
- 1.python程序图标制作
- 【推荐】程序员必读的三十本经典巨作
- SAP资产负债表实现方案探索 - 基于 VBA 自定义函数方法
- python爬app西瓜视频_Python爬虫工程师面试题,采集头条西瓜视频