当前位置: 首页 » 产品 » 电子五金 » 正文

C#无损压缩图片代码

放大字体  缩小字体 发布日期: 2024-09-30 11:29   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:20
核心提示:  话不多说,请看代码:  ///  /// 根据指定尺寸得到按比例缩放的尺寸,返回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();

 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站