国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#無損高質量壓縮圖片實現代碼

2020-01-24 00:40:12
字體:
來源:轉載
供稿:網友

最近,項目上涉及到了圖像壓縮,發現原有的圖像壓縮功能,雖然保證了圖像的大小300K以內,但是壓縮后的圖像看的不在清晰,并且,限定了圖片的Height或者是Width。

在CSDN上看到了一個壓縮算法:C#無損高質量壓縮圖片代碼

進過測試這個算法,發現,將原始圖像的大小進行對半處理,然后迭代跳轉壓縮質量參數,可以得到不錯的效果。

修改后的算法如下:

/// <summary>/// 無損壓縮圖片/// </summary>/// <param name="sFile">原圖片地址</param>/// <param name="dFile">壓縮后保存圖片地址</param>/// <param name="flag">壓縮質量(數字越小壓縮率越高)1-100</param>/// <param name="size">壓縮后圖片的最大大小</param>/// <param name="sfsc">是否是第一次調用</param>/// <returns></returns>public static bool CompressImage(string sFile, string dFile, int flag = 90, int size = 300, bool sfsc = true){ Image iSource = Image.FromFile(sFile); ImageFormat tFormat = iSource.RawFormat; //如果是第一次調用,原始圖像的大小小于要壓縮的大小,則直接復制文件,并且返回true FileInfo firstFileInfo = new FileInfo(sFile); if (sfsc == true && firstFileInfo.Length < size * 1024) { firstFileInfo.CopyTo(dFile); return true; } int dHeight = iSource.Height / 2; int dWidth = iSource.Width / 2; int sW = 0, sH = 0; //按比例縮放 Size tem_size = new Size(iSource.Width, iSource.Height); if (tem_size.Width > dHeight || tem_size.Width > dWidth) { if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth)) {  sW = dWidth;  sH = (dWidth * tem_size.Height) / tem_size.Width; } else {  sH = dHeight;  sW = (tem_size.Width * dHeight) / tem_size.Height; } } else { sW = tem_size.Width; sH = tem_size.Height; } Bitmap ob = new Bitmap(dWidth, dHeight); Graphics g = Graphics.FromImage(ob); g.Clear(Color.WhiteSmoke); g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel); g.Dispose(); //以下代碼為保存圖片時,設置壓縮質量 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) {  ob.Save(dFile, jpegICIinfo, ep);//dFile是壓縮后的新路徑  FileInfo fi = new FileInfo(dFile);  if (fi.Length > 1024 * size)  {  flag = flag - 10;  CompressImage(sFile, dFile, flag, size, false);  } } else {  ob.Save(dFile, tFormat); } return true; } catch { return false; } finally { iSource.Dispose(); ob.Dispose(); }}

效果圖如下:

第一張的大小是2.82M,尺寸是3680*4640。

第二張的大小是274KB,尺寸是1740*2320,清晰度方面還是不錯的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 垣曲县| 安阳县| 信阳市| 阿拉善左旗| 拉孜县| 土默特右旗| 探索| 石棉县| 石景山区| 福清市| 衡阳县| 罗山县| 新建县| 揭阳市| 绥化市| 汾西县| 固镇县| 昔阳县| 龙川县| 武邑县| 县级市| 金门县| 莱州市| 台江县| 鄂托克旗| 平度市| 云南省| 黄龙县| 称多县| 左贡县| 昌吉市| 崇信县| 化隆| 西和县| 新竹县| 博湖县| 舟山市| 江安县| 集贤县| 乌拉特后旗| 会东县|