您好,登錄后才能下訂單哦!
我們在實際項目開發(fā)過程中,曾經遇到過一個需求,就是要開發(fā)一個對大量圖片進行整理(刪除掉一些不符合要求的圖片)、歸類(根據格式進行分類,比如jpg格式、bmp格式等)、壓縮(因為有的圖片很大很占空間,看能否在保證清晰可辨、尺寸適中的前提下,適當?shù)膲嚎s掉一部分空間)的小程序。這里只是重點分享一下如何對圖片進行壓縮。
我們也不是水平非常高的圖像處理專家,但是實際項目中又有這個需求,作為普通的程序員應該如何滿足這個要求呢?
很顯然,最簡單的思路就是適當?shù)目s小原圖的尺寸大小或者是適當?shù)慕档驮瓐D的質量要求,這樣就能有效地降低原圖所占的空間。
先上一個程序的截圖:
我們通過選擇圖片的原目錄以及目標目錄,設置好壓縮大小和壓縮質量,點擊開始壓縮按鈕,即可進行批量圖片壓縮。
在圖片的原目錄選擇當中,能夠遍歷根目錄下的所有圖片(包括子目錄下的圖片)。
好了,很簡單的一個界面,下面我們直接上幾段核心代碼:
/// <summary> /// 壓縮圖片方法 /// </summary> /// <param name="sourcePath">原目錄</param> /// <param name="targetPath">目標目錄</param> /// <returns>壓縮是否成功</returns> private bool CompressPicture(string sourcePath, string targetPath) { try { double sizeRate = double.Parse(cbSizeRate.Text) / 100;// 大小比率 int qualityRate = int.Parse(cbQualityRate.Text);// 品質比率 Image sourceImage = Image.FromFile(sourcePath); //調整圖片大小 Bitmap bmp = new Bitmap(sourceImage, new Size((int)(sourceImage.Width * sizeRate), (int)(sourceImage.Height * sizeRate))); //壓縮圖片 SaveAsJPEG(bmp, targetPath, qualityRate); GC.Collect(); return true; } catch { return false; } }
/// <summary> /// 保存為JPEG格式,支持壓縮質量選項 /// </summary> /// <param name="bmp">原始位圖</param> /// <param name="FileName">新文件地址</param> /// <param name="Qty">壓縮質量,越大越好,文件也越大(0-100)</param> /// <returns>成功標志</returns> public static bool SaveAsJPEG(Bitmap bmp, string FileName, int Qty) { try { EncoderParameter p; EncoderParameters ps; ps = new EncoderParameters(1); p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty); ps.Param[0] = p; bmp.Save(FileName, GetCodecInfo("p_w_picpath/jpeg"), ps); return true; } catch { return false; } }
/// <summary> /// 保存JPG時用 /// </summary> /// <param name="mimeType"></param> /// <returns>得到指定mimeType的ImageCodecInfo</returns> private static ImageCodecInfo GetCodecInfo(string mimeType) { ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo ici in CodecInfo) { if (ici.MimeType == mimeType) return ici; } return null; }
/// <summary> /// 遍歷文件 /// </summary> /// <param name="info"></param> public void ListFiles(FileSystemInfo info) { if (!info.Exists) return; DirectoryInfo dir = info as DirectoryInfo; if (dir == null) return; FileSystemInfo[] files = dir.GetFileSystemInfos(); for (int i = 0; i < files.Length; i++) { FileInfo file = files[i] as FileInfo; if (file != null && file.Name.Trim().LastIndexOf(".") > -1) { if (file.Name.Substring(file.Name.LastIndexOf(".")).ToUpper() == ".JPG") { this.lvSourceFolderList.Items.Add(file.FullName); p_w_picpathList.Add(file.FullName); } } else { ListFiles(files[i]); //對于子目錄,進行遞歸調用 } } }
源代碼下載地址:WinForm批量圖片壓縮工具源碼
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。