c# 如何实现图片压缩
一般在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# 如何实现图片压缩相关推荐
- Android性能优化之图片压缩优化
1 分类 Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注: ...
- JS—图片压缩上传(单张)
*vue+webpack环境,这里的that指到vue实例 <input type="file" name="file" accept="ima ...
- 使用libjpeg进行图片压缩(哈夫曼算法,无损压缩)
Huffman算法也是一种无损压缩算法,但与LZW压缩算法不同,Huffman需要得到每种字符出现概率的先验知识.通过计算字符序列中每种字符出现的频率,为每种字符进行唯一的编码设计,使得频率高的字符占 ...
- Android图片压缩(质量压缩和尺寸压缩)
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...
- android apk瘦身之 图片压缩 tinypng
Android 的图片压缩其实压缩比很小.tinypng 大概可以压缩20%左右,我们工程的所有图片,之前是860k,压缩之后620k,少了200k. 使用: 1.安装python 2.使用pip进行 ...
- (0031) iOS 开发之图片压缩
1. Aspect单词的, 都会按照图片的宽高比来拉伸.这样会显示不全照片 2. Scale单词的,都会对图片进行拉伸(缩放); 3. 没有出现Scale单词的,都不会对图片进行拉伸; UIViewC ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...
- 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )
文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...
最新文章
- 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第2课2.6节隐藏和锁定对象...
- 翻译 | CSS网格(CSS Grid)布局入门
- 经常下载的朋友注意了,教你怎样硬盘零伤害(从论坛上拷下来收藏的)
- KMeans和KMedoid 的Matlab实现
- 页面事务处理 ContextUtil.SetComplete(); 没有 MTS 对象上下文
- java五子棋课程设计_JAVA课程设计(五子棋)021
- Appium+python自动化8-Appium Python API
- 从xtrabackup备份恢复单表【转】
- 那些VisualStudio隐藏的调试功能
- python爬虫 库_七款必备的Python爬虫库,你知道几个?
- 4006基于邻接矩阵的顶点的删除(C++,附思路)
- MATLAB图像分割——标记分水岭分割算法
- My 10 favorite APPs
- 信庭嵌入式工作室-ARM应用技术之体系结构应用(中)
- python的元组是否能重复_python – 在带有元组的列表列表中查找重复项
- 大一学生HTML期末作业 【html体育排球5页面带注册】学生网页设计作业源码
- 物联网入门教程【上】
- 华为u8825d手机root和google play安装有教程和相关文件
- 【三维目标检测】VoxelNet(三):模型详解
- 信息论基础(Part2)