栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#无损压缩图片

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号