C#无损压缩图片代码

  话不多说,请看代码:

  ///

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

  }

  }

(0)

相关推荐

  • 网页背景图片代码汇总

    网页背景图片代码汇总 操作方法 01 普遍类的网页背景图片代码 <style>body{background-image:url(logo.gif);background-repeat:n ...

  • WinForm开发picturebox图像重绘(picturebox显示图片)代码分享

    应用场景与实现方式 应用场景:在开发一个图像切割程序,需要对图像切割方式做一直直观的展示。比如将一张尺寸为2048*1024的原图按8*4切割方式切割为尺寸为256*256的切片,在原图上绘制分割线来 ...

  • QQ空间自定义尾巴小图片代码

    这是QQ空间小尾巴前的图案。 [em]e10001[/em]黑锁 [em]e10002[/em]苹果 [em]e10003[/em]平板 [em]e10004[/em]电脑 [em]e10005[/e ...

  • HTML网页中怎么写插入图片的代码

    网站都有很多的图片,你知道在代码中怎么插入图片吗. 操作方法 01 在代码中经常用到的插入图片代码是img属性,格式就是<img src="" alt="" ...

  • 美图淘淘图片批上传 快速上架商品

    春装大量上市,网店掌柜们想必都忙着进行商品上架工作。如果只用传统方法上架商品,过程繁重又重复,有如地狱般的工作量啊!不过不要紧,有美图淘淘呢!这款专为网店卖家设计的图片美化软件,处理完图片后可直接实现 ...

  • 把鼠标放图片上,怎样才能显示出字?

    常常会看到把鼠标放在图片上,就会显示出文字.通常我们都认为是写上Alt标签,图片上就可以显示字了.其实不然,这都是我们对Alt属性的误读.下面,来给大家说下,图片上要显示字究竟是用什么标签呢?通过下面 ...

  • 如何查看网页元素的代码和样式

    作为一个网页设计爱好者,经常会发现网页上的一些元素很好看,想down下来保存并使用,这里教你一个简单的方法,下载网页元素的代码和样式. 操作方法 01 以本页"方法/步骤"中的第一 ...

  • 如何将图片上传到互联网

    将图片上传到互联网上的方法有很多,根据上传图片用途的不同,选择的方法也不同.如果你只是想将图片分享到论坛中,那么Imugr可能是最好的选择:如果你想将图片分享给社交网站上的好友,那么Instagram ...

  • 如何下载推特(Twitter)上的图片

    你可以从手机端的Twitter应用和电脑上下载推特上的照片和其他图片.本文将描述从推特上下载一张或多张图片的方法.如果你正尝试从推特上下载多张照片,你可以点击此处查看保存推特组图的具体方法. 将照片下 ...