Bmp轉Jpg

  代碼非原創。ide

  由於在項目中須要用到壓縮圖片的功能,因此就在網上找到了這段代碼,稍微探索了一下發現其功能仍是比較齊全的。大意就是一個對圖片從新編碼的過程。函數

  經過System.Drawing.Image類以及繼承自他的BitmapMetafile類可完成對圖片格式的轉換(BMP/JPEG/GIF/TIFF/PNG),轉存JPEG時的質量壓縮,以及裁剪和縮放(該部分不在本文討論範圍)。代碼以下:
編碼

  代碼有點亂,說一下大體思路,spa

  首先將須要的圖片讀取進來code

        Image iSource = Image.FromFile(sFile);

 

  以後是生成一個Image.save()時的參數,用於設置JPEG的壓縮比例,值越小,壓縮率越大orm

            Imaging.EncoderParameters ep = new Imaging.EncoderParameters();
            long[] qy = new long[1];
            qy[0] = flag;//設置壓縮的比例1-100 
            Imaging.EncoderP    arameter eParam = new Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
            ep.Param[0] = eParam;        

 

選擇你編碼器,系統內置的編碼器只有BMP/JPEG/GIF/TIFF/PNG這幾種格式。blog

        System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();//獲取系統內置的編碼器
             System.Drawing.Imaging.ImageCodecInfo jpegICIinfo = null;
                for (int x = 0; x < arrayICI.Length; x++)
                {
                    if (arrayICI[x].FormatDescription.Equals("JPEG"))
                    {
                        jpegICIinfo = arrayICI[x];//查找出JPEG編碼器
                        break;
                    }
                }

 

最後就是保存  繼承

            iSource.Save(dPath, jpegICIinfo, ep);    

具體更加深刻的內容還將來得及探索,若有則留做以後補充。圖片

完整的函數代碼以下: ip

 1         /// <summary>
 2         /// 壓縮圖片分辨率
 3         /// </summary>
 4         /// <param name="sFile">原圖片的完整路徑</param>
 5         /// <param name="dPath">目標位置的完整路徑</param>
 6         /// <param name="flag">圖片的壓縮比例</param>
 7         /// <returns></returns>
 8         public static bool CompressPic(string sFile, string dPath, int flag)
 9         { 
10             if (!File.Exists(sFile))
11             {
12                 return false;
13             }
14             string path1 = Path.GetDirectoryName(dPath);
15             if (!Directory.Exists(path1))
16             {
17                 Directory.CreateDirectory(path1);
18             }
19 
20             System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);
21             System.Drawing.Imaging.ImageFormat tFormat = iSource.RawFormat;
22             //如下代碼爲保存圖片時,設置壓縮質量 
23             System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
24             long[] qy = new long[1];
25             qy[0] = flag;//設置壓縮的比例1-100 
26             System.Drawing.Imaging.EncoderParameter eParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
27             ep.Param[0] = eParam;
28             try
29             {
30                 System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();//獲取系統內置的編碼器
31                 System.Drawing.Imaging.ImageCodecInfo jpegICIinfo = null;
32                 for (int x = 0; x < arrayICI.Length; x++)
33                 {
34                     if (arrayICI[x].FormatDescription.Equals("JPEG"))
35                     {
36                         jpegICIinfo = arrayICI[x];//查找出JPEG編碼器
37                         break;
38                     }
39                 }
40                 if (jpegICIinfo != null)
41                 {
42                     iSource.Save(dPath, jpegICIinfo, ep);//dFile是壓縮後的新路徑                     
43                 }
44                 else
45                 {
46                     iSource.Save(dPath, tFormat);
47                 }
48                 return true;
49             }
50             catch
51             {
52                 return false;
53             }
54             finally
55             {
56                 iSource.Dispose();
57             }
58         }    
View Code
相關文章
相關標籤/搜索