一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图。
一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图。

下面贴出我自己琢磨的图片压缩算法,首先这个是未经优化的简单实现:

代码如下:

public static System.Drawing.Image GetImageThumb(System.Drawing.Image sourceImg, int width, int height){System.Drawing.Image targetImg = new System.Drawing.Bitmap(width, height);using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(targetImg)){g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;g.DrawImage(sourceImg, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, sourceImg.Width, sourceImg.Height), System.Drawing.GraphicsUnit.Pixel);g.Dispose();}return targetImg;}

这个方法比较简单,用到的是高质量压缩。经过这个方法压缩后,200K的图片只能压缩到160k左右。经过改写代码实现了如下的方法:

代码如下:

public Bitmap GetImageThumb(Bitmap mg, Size newSize){double ratio = 0d;double myThumbWidth = 0d;double myThumbHeight = 0d;int x = 0;int y = 0;Bitmap bp;if ((mg.Width / Convert.ToDouble(newSize.Width)) > (mg.Height /Convert.ToDouble(newSize.Height)))ratio = Convert.ToDouble(mg.Width) / Convert.ToDouble(newSize.Width);elseratio = Convert.ToDouble(mg.Height) / Convert.ToDouble(newSize.Height);myThumbHeight = Math.Ceiling(mg.Height / ratio);myThumbWidth = Math.Ceiling(mg.Width / ratio);Size thumbSize = new Size((int)newSize.Width, (int)newSize.Height);bp = new Bitmap(newSize.Width, newSize.Height);x = (newSize.Width - thumbSize.Width) / 2;y = (newSize.Height - thumbSize.Height);System.Drawing.Graphics g = Graphics.FromImage(bp);g.SmoothingMode = SmoothingMode.HighQuality;g.InterpolationMode = InterpolationMode.HighQualityBicubic;g.PixelOffsetMode = PixelOffsetMode.HighQuality;Rectangle rect = new Rectangle(x, y, thumbSize.Width, thumbSize.Height);g.DrawImage(mg, rect, 0, 0, mg.Width, mg.Height, GraphicsUnit.Pixel);return bp;}

这样实现的压缩使压缩率大幅度上升。其实代码并没有变多少,最主要的是在保存的时候要是用jpg格式,如果不指定格式,默认使用的是png格式。

下面这个是根据设置图片质量数值来压缩图片写的的方法:

代码如下:

public static bool GetPicThumbnail(string sFile, string outPath, int flag){System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);ImageFormat tFormat = iSource.RawFormat;//以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters();long[] qy = new long[1];qy[0] = flag;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);ep.Param[0] = eParam;try{ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();ImageCodecInfo jpegICIinfo = null;for (int x = 0; x < arrayICI.Length; x++){if (arrayICI[x].FormatDescription.Equals("JPEG")){jpegICIinfo = arrayICI[x];break;}}if (jpegICIinfo != null){iSource.Save(outPath, jpegICIinfo, ep);//dFile是压缩后的新路径 }else{iSource.Save(outPath, tFormat);}return true;}catch{return false;}finally{iSource.Dispose();iSource.Dispose();}}

以上就是c# 如何实现c#教程图片压缩的详细内容

c# 如何实现图片压缩相关推荐

  1. Android性能优化之图片压缩优化

    1 分类 Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注: ...

  2. JS—图片压缩上传(单张)

    *vue+webpack环境,这里的that指到vue实例 <input type="file" name="file" accept="ima ...

  3. 使用libjpeg进行图片压缩(哈夫曼算法,无损压缩)

    Huffman算法也是一种无损压缩算法,但与LZW压缩算法不同,Huffman需要得到每种字符出现概率的先验知识.通过计算字符序列中每种字符出现的频率,为每种字符进行唯一的编码设计,使得频率高的字符占 ...

  4. Android图片压缩(质量压缩和尺寸压缩)

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

  5. android apk瘦身之 图片压缩 tinypng

    Android 的图片压缩其实压缩比很小.tinypng 大概可以压缩20%左右,我们工程的所有图片,之前是860k,压缩之后620k,少了200k. 使用: 1.安装python 2.使用pip进行 ...

  6. (0031) iOS 开发之图片压缩

    1. Aspect单词的, 都会按照图片的宽高比来拉伸.这样会显示不全照片 2. Scale单词的,都会对图片进行拉伸(缩放); 3. 没有出现Scale单词的,都不会对图片进行拉伸; UIViewC ...

  7. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  8. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  9. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  10. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

最新文章

  1. PHP中单例模式:三私一公是什么?
  2. iphone objective-c内存管理
  3. JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】
  4. 如何帮助谷歌鉴别内容重复的网页
  5. 触目惊心,超过 8000+ 漏洞 Redis 暴露在云端!
  6. Attachment multiple read API - performance with regular expression
  7. HDUOJ 1062 TEXT REVERSE
  8. java volatile线程可见_吃透Java并发:volatile是怎么保证可见性的
  9. 机器视觉中的图像采集卡
  10. web app iphone4 iphone5 iphone6 iphone6 Plus响应式布局 适配代码
  11. vb.net的UI设计
  12. Python进行相关分析
  13. windows中bat批处理的注释语句
  14. SSH 只能用于远程 Linux 主机?那说明你见识太小了!
  15. 手机怎么识别图片中的文字?来试试这两个方法吧
  16. xss.haozi靶场通关
  17. 水纹(涟漪)特效壁纸——程序+实现原理
  18. WebRTC中的信令和内网穿透技术 STUN / TURN
  19. 学习UI设计,哪些软件是必学的
  20. greenplum安装方法详解

热门文章

  1. 沟通的艺术:看人入里,看出人外 - part 3
  2. TP6手册理解之架构·服务
  3. 如何理解国产操作系统,现状又是如何?
  4. navicat premium 15 下载安装详细教程
  5. 区块链市场——专为用户打造的一站式应用下载平台
  6. Linux查看DNS
  7. Python WindowsError
  8. C语言读取指定文件夹下面的所有文件
  9. 家居网络营销:定制家具行业如何做好全网营销?
  10. 高斯衰减python实现