天天看點

修改圖檔大小和品質

http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=129365&extra=page%3D4

下面才是關鍵的:

我的程式是在控制台運作的,我先建立了一個類:

  1. using System;
  2. using System.IO;
  3. using System.Collections;
  4. using System.Drawing;//not in this
  5. using System.Drawing.Drawing2D;
  6. using System.Drawing.Imaging;//in this ImageFormat.Jpeg
  7. namespace ResizePhoto
  8. {
  9.     public class ResizePic
  10.     {
  11.         /// <summary>
  12.         /// 修改圖檔大小
  13.         /// </summary>
  14.         /// <param name="szdir"></param>
  15.         /// <param name="width"></param>
  16.         /// <param name="height"></param>
  17.         public void resize_pic(string szdir, int width, int height)
  18.         {
  19.             int i = 0;
  20.             Image img = null;
  21.             Image bmcpy = null;
  22.             Graphics gh = null;
  23.             string szsavedir = Directory.CreateDirectory(szdir + "\\resized").FullName.ToString();
  24.             string[] szfiles = Directory.GetFiles(szdir, "*.jpg");
  25.             foreach (string szfile in szfiles)
  26.             {
  27.                 img = Image.FromFile(szfile);
  28.                 bmcpy = new Bitmap(width, height);
  29.                 gh = Graphics.FromImage(bmcpy);
  30.                 gh.DrawImage(img, new Rectangle(0, 0, width, height));
  31.                 bmcpy.Save(szsavedir + "\\" + i.ToString() + ".jpg", ImageFormat.Jpeg);
  32.                 i++;
  33.                 Console.WriteLine("第" + i.ToString() + "照片已經處理完畢,總共" + szfiles.Length + "張圖檔");
  34.             }
  35.             gh.Dispose();
  36.             bmcpy.Dispose();
  37.             img.Dispose();
  38.             Console.WriteLine("{0}張圖檔已經處理完畢", i);
  39.             Console.ReadKey(true);
  40.         }
  41.         /// <summary>
  42.         /// 改變圖檔品質
  43.         /// </summary>
  44.         /// <param name="szdir"></param>
  45.         /// <param name="lqulity"></param>
  46.         public void rebdqulity_pic(string szdir, long lqulity)
  47.         {
  48.             int i = 0;
  49.             Bitmap myBitmap;
  50.             ImageCodecInfo myImageCodecInfo;
  51.             Encoder myEncoder;
  52.             EncoderParameter myEncoderParameter;
  53.             EncoderParameters myEncoderParameters;
  54.             // Get an ImageCodecInfo object that represents the JPEG codec.
  55.             myImageCodecInfo = GetEncoderInfo("image/jpeg");
  56.             myEncoder = Encoder.Quality;
  57.             myEncoderParameters = new EncoderParameters(1);
  58.             myEncoderParameter = new EncoderParameter(myEncoder, lqulity);
  59.             myEncoderParameters.Param[0] = myEncoderParameter;
  60.             string szsavedir = Directory.CreateDirectory(szdir + "\\quality").FullName.ToString();
  61.             string[] szfiles = Directory.GetFiles(szdir, "*.jpg");
  62.             foreach (string szfile in szfiles)
  63.             {
  64.                 myBitmap = new Bitmap(szfile);
  65.                 myBitmap.Save(szsavedir + @"\quli" + i.ToString() + ".jpg", myImageCodecInfo, myEncoderParameters);
  66.                 i++;
  67.             }
  68.         }
  69.         private static ImageCodecInfo GetEncoderInfo(String mimeType)
  70.         {
  71.             int j;
  72.             ImageCodecInfo[] encoders;
  73.             encoders = ImageCodecInfo.GetImageEncoders();
  74.             for (j = 0; j < encoders.Length; ++j)
  75.             {
  76.                 if (encoders[j].MimeType == mimeType)
  77.                     return encoders[j];
  78.             }
  79.             return null;
  80.         }
  81.     }
  82. }

複制代碼 接着在控制台程式調用這個類:

  1. static void Main(string[] args)
  2.         {
  3.             ResizePic resizepic = new ResizePic();
  4.             string strDir = @"test";
  5.             int width = 390;
  6.             int height = 567;
  7.             long quality = 500;
  8.             resizepic.resize_pic(strDir,width,height);
  9.             resizepic.rebdqulity_pic(strDir, quality);
  10.         }

複制代碼 程式比較簡單,還望能夠幫到有用之人……