C#无损压缩图片

发布时间 - 2026-01-11 00:38:08    点击率:

话不多说,请看代码:

/// <summary>
    /// 根据指定尺寸得到按比例缩放的尺寸,返回true表示以更改尺寸
    /// </summary>
    /// <param name="picWidth">图片宽度</param>
    /// <param name="picHeight">图片高度</param>
    /// <param name="specifiedWidth">指定宽度</param>
    /// /// <param name="specifiedHeight">指定高度</param>
    /// <returns>返回true表示以更改尺寸</returns>
    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;
    }
    /// <summary>
    /// 无损压缩图片
    /// </summary>
    /// <param name="sFile">原图片</param>
    /// <param name="dFile">压缩后保存位置</param>
    /// <param name="dHeight">高度</param>
    /// <param name="dWidth">宽度</param>
    /// <param name="flag">压缩质量 1-100</param>
    /// <returns></returns>

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

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


# c#  # 压缩图片  # C#实现无损压缩图片代码示例  # C#无损高质量压缩图片代码  # C#无损高质量压缩图片实现代码  # C#实现无损压缩图片的示例详解  # 按比例  # 多说  # Height  # Width  # return  # sFile  # tem_size  # Boolean  # sH  # isZoomSize  # Size  # false  # dFile  # string  # GetPicThumbnail  # System  # Image  # Drawing  # dWidth  # dHeight 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何构建满足综合性能需求的优质建站方案?  详解Oracle修改字段类型方法总结  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  奇安信“盘古石”团队突破 iOS 26.1 提权  如何有效防御Web建站篡改攻击?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  香港网站服务器数量如何影响SEO优化效果?  Java类加载基本过程详细介绍  怎么用AI帮你设计一套个性化的手机App图标?  高防服务器如何保障网站安全无虞?  如何在万网主机上快速搭建网站?  JavaScript模板引擎Template.js使用详解  在centOS 7安装mysql 5.7的详细教程  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何在景安服务器上快速搭建个人网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何处理CORS跨域请求?(配置示例)  如何在自有机房高效搭建专业网站?  如何快速搭建个人网站并优化SEO?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何基于PHP生成高效IDC网络公司建站源码?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel如何与Inertia.js和Vue/React构建现代单页应用  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel Session怎么存储_Laravel Session驱动配置详解  linux top下的 minerd 木马清除方法  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Laravel定时任务怎么设置_Laravel Crontab调度器配置  如何在IIS中新建站点并解决端口绑定冲突?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  *服务器网站为何频现安全漏洞?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  大连 网站制作,大连天途有线官网?  如何在IIS管理器中快速创建并配置网站?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  高性价比服务器租赁——企业级配置与24小时运维服务