技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

C#無損壓縮圖片代碼

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2017-11-10 00:35┆點擊:

  話不多說,請看代碼:

  ///

  /// 根據(jù)指定尺寸得到按比例縮放的尺寸,返回true表示以更改尺寸

  ///

  /// 圖片寬度

  /// 圖片高度

  /// 指定寬度

  /// /// 指定高度

  /// 返回true表示以更改尺寸

  private bool GetPicZoomSize(ref int picWidth, ref int picHeight, int specifiedWidth, int specifiedHeight)

  {

  int sW = 0, sH = 0;

  Boolean isZoomSize = false;

  //按比例縮放

  Size tem_size = new Size(picWidth, picHeight);

  if (tem_size.Width > specifiedWidth || tem_size.Height > specifiedHeight) //將**改成c#中的或者操作符號

  {

  if ((tem_size.Width * specifiedHeight) > (tem_size.Height * specifiedWidth))

  {

  sW = specifiedWidth;

  sH = (specifiedWidth * tem_size.Height) / tem_size.Width;

  }

  else

  {

  sH = specifiedHeight;

  sW = (tem_size.Width * specifiedHeight) / tem_size.Height;

  }

  isZoomSize = true;

  }

  else

  {

  sW = tem_size.Width;

  sH = tem_size.Height;

  }

  picHeight = sH;

  picWidth = sW;

  return isZoomSize;

  }

  ///

  /// 無損壓縮圖片

  ///

  /// 原圖片

  /// 壓縮后保存位置

  /// 高度

  /// 寬度

  /// 壓縮質(zhì)量 1-100

  ///

  public bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)

  {

  System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);

  ImageFormat tFormat = iSource.RawFormat;

  int sW = iSource.Width, sH = iSource.Height;

  GetPicZoomSize(ref sW, ref sH, dWidth, dHeight);

  Bitmap ob = new Bitmap(dWidth, dHeight);

  Graphics g = Graphics.FromImage(ob);

  g.Clear(Color.WhiteSmoke);

  g.CompositingQuality = CompositingQuality.HighQuality;

  g.SmoothingMode = SmoothingMode.HighQuality;

  g.InterpolationMode = 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();

  //以下代碼為保存圖片時,設置壓縮質(zhì)量

  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是壓縮后的新路徑

  }

  else

  {

  ob.Save(dFile, tFormat);

  }

  return true;

  }

  catch

  {

  return false;

  }

  finally

  {

  iSource.Dispose();