C#图片压缩

功能函数,从项目中剥离而来

复制代码
/// <summary>
  /// 图片压缩功能
  /// </summary>
  /// <param name="sourceImage">原图</param>
  /// <param name="targetSize">目标压缩尺寸</param>
  /// <returns></returns>
  public static Image imgCompress(Image sourceImage, Size targetSize)  ///图片压缩功能
  {
    int targetWidth = targetSize.Width, targetHeight = targetSize.Height;  //图片转换的目标的尺寸;由于图片原有的比例问题,目标尺寸不等于最终的尺寸。
    int width;//图片最终的宽
    int height;//图片最终的高
    try
    {
      System.Drawing.Imaging.ImageFormat format = sourceImage.RawFormat;
      Bitmap targetPicture = new Bitmap(targetWidth, targetHeight);
      Graphics g = Graphics.FromImage(targetPicture);
      g.Clear(Color.White);
      //计算缩放图片的大小
      if (sourceImage.Width > targetWidth && sourceImage.Height <= targetHeight)
      {
        width = targetWidth;
        height = (width * sourceImage.Height) / sourceImage.Width;
      }
      else if (sourceImage.Width <= targetWidth && sourceImage.Height >  targetHeight)
      {
        height = targetHeight;
        width = (height * sourceImage.Width) / sourceImage.Height;
      }
      else if (sourceImage.Width <= targetWidth && sourceImage.Height <=  targetHeight)
      {
        width = sourceImage.Width;
        height = sourceImage.Height;
      }
      else
      {
        width = targetWidth;
        height = (width * sourceImage.Height) / sourceImage.Width;
        if (height > targetHeight)
        {
          height = targetHeight;
          width = (height * sourceImage.Width) / sourceImage.Height;
        }
      }
      g.DrawImage(sourceImage, (targetWidth - width) / 2, (targetHeight - height) /  2, width, height);
      sourceImage.Dispose();
      return targetPicture;
    }
    catch (Exception ex)
    {
    }
    return null;
  }
复制代码

 调用示例

      HttpPostedFile pic_upload = Request.Files["file"];
      System.Drawing.Image bigImage = clsPublic.imgCompress(System.Drawing.Image.FromStream(pic_upload.InputStream), new Size(400, 400));//缩后的大图
      System.Drawing.Image minImage =clsPublic.imgCompress(System.Drawing.Image.FromStream(pic_upload.InputStream), new Size(50, 50));//缩后的小图

 

posted @   君宁天下  阅读(1844)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
野生程序员真的是太难了,一刻也不敢停止学习
点击右上角即可分享
微信分享提示