一般在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. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第2课2.6节隐藏和锁定对象...
  2. 翻译 | CSS网格(CSS Grid)布局入门
  3. 经常下载的朋友注意了,教你怎样硬盘零伤害(从论坛上拷下来收藏的)
  4. KMeans和KMedoid 的Matlab实现
  5. 页面事务处理 ContextUtil.SetComplete(); 没有 MTS 对象上下文
  6. java五子棋课程设计_JAVA课程设计(五子棋)021
  7. Appium+python自动化8-Appium Python API
  8. 从xtrabackup备份恢复单表【转】
  9. 那些VisualStudio隐藏的调试功能
  10. python爬虫 库_七款必备的Python爬虫库,你知道几个?
  11. 4006基于邻接矩阵的顶点的删除(C++,附思路)
  12. MATLAB图像分割——标记分水岭分割算法
  13. My 10 favorite APPs
  14. 信庭嵌入式工作室-ARM应用技术之体系结构应用(中)
  15. python的元组是否能重复_python – 在带有元组的列表列表中查找重复项
  16. 大一学生HTML期末作业 【html体育排球5页面带注册】学生网页设计作业源码
  17. 物联网入门教程【上】
  18. 华为u8825d手机root和google play安装有教程和相关文件
  19. 【三维目标检测】VoxelNet(三):模型详解
  20. 信息论基础(Part2)

热门文章

  1. Overload vs Override
  2. 华为超越三星拿下第一!2019年全球5G手机出货量榜单揭晓
  3. 虚拟机配置可用的DNS服务器
  4. 操作系统内核Hack:(二)底层编程基础
  5. 华为存储FusionStorage(备份②)
  6. 计算机课程学习心得ppt,计算机课程学习心得体会.docx
  7. 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
  8. Word中如何删除目录页的页码
  9. 读《楚汉传奇》中历史故事悟项目管理
  10. kafka的安装和使用(详细版)