我們在實際項目開發(fā)過程中,曾經遇到過一個需求,就是要開發(fā)一個對大量圖片進行整理(刪除掉一些不符合要求的圖片)、歸類(根據格式進行分類,比如jpg格式、bmp格式等)、壓縮(因為有的圖片很大很占空間,看能否在保證清晰可辨、尺寸適中的前提下,適當的壓縮掉一部分空間)的小程序。這里只是重點分享一下如何對圖片進行壓縮。
成都創(chuàng)新互聯服務項目包括隆回網站建設、隆回網站制作、隆回網頁制作以及隆回網絡營銷策劃等。多年來,我們專注于互聯網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯網行業(yè)的解決方案,隆回網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到隆回省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
我們也不是水平非常高的圖像處理專家,但是實際項目中又有這個需求,作為普通的程序員應該如何滿足這個要求呢?
很顯然,最簡單的思路就是適當的縮小原圖的尺寸大小或者是適當的降低原圖的質量要求,這樣就能有效地降低原圖所占的空間。
先上一個程序的截圖:
我們通過選擇圖片的原目錄以及目標目錄,設置好壓縮大小和壓縮質量,點擊開始壓縮按鈕,即可進行批量圖片壓縮。
在圖片的原目錄選擇當中,能夠遍歷根目錄下的所有圖片(包括子目錄下的圖片)。
好了,很簡單的一個界面,下面我們直接上幾段核心代碼:
/// <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批量圖片壓縮工具源碼
標題名稱:用C#開發(fā)一個WinForm版的批量圖片壓縮工具
文章網址:http://chinadenli.net/article30/gspepo.html
成都網站建設公司_創(chuàng)新互聯,為您提供App開發(fā)、網站導航、網站設計、網頁設計公司、網站收錄、網站營銷
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯