对于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# 生成高清缩略图相关推荐

  1. 生成高清缩略图; 添加图片、文字水印; 图片、文字水印透明

    之前写了一个公共的ImgHelper类,主要提供高清晰缩略图生成,由于在之前的实际操作过程中存在一些问题,最近有了点时间,于是重新拾起来再改进一下,顺便研究一下GDI+. 问题一:产品搜索列表展示,每 ...

  2. php生成高清缩略图,PHP生成缩略图函数

    /** * 生成缩略图 * @author [email protected] * @param string 源图绝对完整地址{带文件名及后缀名} * @param string 目标图绝对完整地址 ...

  3. 视频转GIF太模糊了吗?我来教你使用FFmpeg生成高清GIF!!!

    有钱能使鬼推磨,昨天40多个阅读,没有一个人给我实在是太惨了,所以,再来个第二弹吧! 那么这次的主题,就是教你如何通过视频生成高清的GIF图片!! 恩,素材就用上次的那个动态收款码吧! 使用FFmpe ...

  4. [计算机视觉] 手把手教你如何生成高清的AprilTag

    官方提供的AprilTag 3系列的所有标签的图像:https://github.com/AprilRobotics/apriltag-imgs 但是当我克隆下来以后,发现里面的AprilTag标签图 ...

  5. 使用FFmpeg生成高清gif图

    前言 使用FFmpeg能够很方便的给视频片段或GIF加水印,同时还能对选取的片段生成GIF图,但是在使用默认FFmpeg设置情况下,生成的GIF画质很差,有很明显的栅格化现象.如何生成高质量的GIF是 ...

  6. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)...

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  7. Stable Diffusion 生成高清图片

    Stable Diffusion 生成 8K 高清图片 0. 简介 1. 安装 ultimate-upscale-for-automatic1111 插件 2. 安装 4x-UltraSharp 模型 ...

  8. Asp.Net 上传图片并生成高清晰缩略图

    在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...

  9. 生死看淡,不服就GAN(九)----英伟达力作PGGAN实战,生成高清图片

    一.前言 2017年,NVIDIA Research 网站发布了一篇颇为震撼的GAN论文:Progressive Growing of GANs for Improved Quality, Stabi ...

  10. 斗破苍穹-云韵 AI生成高清大图

    1080*1920高清大图,1000张,人工智能机器学习生成的AI高清古装仙侠美女图,云岚宗宗主云韵. 云韵,天蚕土豆所著异世大陆类玄幻小说<斗破苍穹>及其衍生作品中的角色,曾化名云芝.加 ...

最新文章

  1. vue进行判断使用class_vue如何判断dom的class
  2. 全卷积网络的理解——理解论文Fully Convolutional Networks for Semantic Segmentation
  3. MATLAB从入门到精通-Matlab R2020b新功能 | 子标题和标题/标签对齐功能!
  4. 魅族16Android版本,丝滑流畅?魅族16即将适配MIUI10/安卓9系统
  5. 制作可以自动隐藏的弹出式菜单
  6. Druid 数据源连接池配置
  7. python把数据写入excel_Python向excel中写入数据的方法
  8. c语言编写一个函数判断闰年,C语言:实现一个函数判断year是不是闰年
  9. 疑问:当流量被封禁之后(论资本之力):防流量被恶意盗挖(抛砖篇)
  10. oracle发生重启动的介绍
  11. 淋雨量matlab,淋雨量数学模型
  12. [转]Git详解之三 Git分支
  13. Win11快速截屏的4种方法介绍
  14. oracle数据库max使用,Oracle / PLSQL MAX函数
  15. cmos逻辑门传输延迟时间_什么是TTL电平、CMOS电平?区别是什么?
  16. stm32 jlink Unexceped core id found 0x00000000,excepted 0X3BA00477,MASK 0XFFFFFFFF
  17. 1.python程序图标制作
  18. 【推荐】程序员必读的三十本经典巨作
  19. SAP资产负债表实现方案探索 - 基于 VBA 自定义函数方法
  20. python爬app西瓜视频_Python爬虫工程师面试题,采集头条西瓜视频

热门文章

  1. maven跳过单元测试
  2. 如何制作通讯录vcf_【教程】刷机或更换手机后快速导入通讯录的方法
  3. 单片机有没有想象中那么好学,很迷茫有说正面有说负面
  4. 数据库与表的操作之创建表(CREATE TABLE)
  5. 配置druid的过程以及问题
  6. GEO基因芯片数据处理精华(一):GEOquery包
  7. 什么是迁移学习?迁移学习的实现方法与工具分析
  8. Java语言实现查找最长前缀
  9. 数据结构--二叉搜索树
  10. Flask-WTF CSRF 保护P3