C#无损压缩图片代码
C#无损压缩图片代码
发布时间:2017-04-13 来源:查字典编辑
摘要:话不多说,请看代码://////根据指定尺寸得到按比例缩放的尺寸,返回true表示以更改尺寸//////图片宽度///图片高度///指定宽度...

  话不多说,请看代码:

  ///

  /// 根据指定尺寸得到按比例缩放的尺寸,返回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;

  }

  ///

  /// 无损压缩图片

  ///

  ///

原图片

  ///

压缩后保存位置

  ///

高度

  ///

宽度

  ///

压缩质量 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();

  //以下代码为保存图片时,设置压缩质量

  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();

  ob.Dispose();

  }

  }

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新服务器_操作系统教程学习
热门服务器_操作系统教程学习
电脑子分类