C#修改图片尺寸以及不改变原有图片比例的方法

在C#中修改图片尺寸而不改变其原有比例,可以通过计算目标尺寸来保持图片的宽高比。以下是一个示例代码,展示了如何使用System.Drawing命名空间中的类来实现这一功能:

图片[1]_C#修改图片尺寸以及不改变原有图片比例的方法_知途无界

引入必要的命名空间

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;

    定义方法以调整图片尺寸

      public class ImageResizer
      {
          public static void ResizeImage(string inputImagePath, string outputImagePath, int maxWidth, int maxHeight)
          {
              using (Image image = Image.FromFile(inputImagePath))
              {
                  // 计算新的尺寸,保持宽高比
                  int newWidth = image.Width;
                  int newHeight = image.Height;
      
                  double aspectRatio = (double)image.Width / image.Height;
      
                  if (newWidth > maxWidth || newHeight > maxHeight)
                  {
                      if (image.Width > image.Height)
                      {
                          newWidth = maxWidth;
                          newHeight = (int)(maxWidth / aspectRatio);
                      }
                      else
                      {
                          newHeight = maxHeight;
                          newWidth = (int)(maxHeight * aspectRatio);
                      }
      
                      // 如果新的宽度或高度仍然超出限制,则进一步调整
                      if (newWidth > maxWidth)
                      {
                          newWidth = maxWidth;
                          newHeight = (int)(maxWidth / aspectRatio);
                      }
      
                      if (newHeight > maxHeight)
                      {
                          newHeight = maxHeight;
                          newWidth = (int)(maxHeight * aspectRatio);
                      }
                  }
      
                  // 创建一个新的Bitmap对象,并设置新的尺寸
                  using (Bitmap newImage = new Bitmap(newWidth, newHeight))
                  {
                      using (Graphics graphics = Graphics.FromImage(newImage))
                      {
                          // 设置高质量插值模式
                          graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
      
                          // 绘制调整后的图片
                          Rectangle rect = new Rectangle(0, 0, newWidth, newHeight);
                          graphics.DrawImage(image, rect);
      
                          // 保存新的图片
                          newImage.Save(outputImagePath, GetImageFormat(outputImagePath));
                      }
                  }
              }
          }
      
          private static ImageFormat GetImageFormat(string filePath)
          {
              string extension = Path.GetExtension(filePath).ToLower();
              switch (extension)
              {
                  case ".jpg":
                  case ".jpeg":
                      return ImageFormat.Jpeg;
                  case ".png":
                      return ImageFormat.Png;
                  case ".bmp":
                      return ImageFormat.Bmp;
                  case ".gif":
                      return ImageFormat.Gif;
                  default:
                      throw new NotSupportedException("Unsupported image format.");
              }
          }
      }

      调用方法

        class Program
        {
            static void Main(string[] args)
            {
                string inputImagePath = "path_to_your_input_image.jpg";
                string outputImagePath = "path_to_your_output_image.jpg";
                int maxWidth = 800;
                int maxHeight = 600;
        
                ImageResizer.ResizeImage(inputImagePath, outputImagePath, maxWidth, maxHeight);
        
                Console.WriteLine("Image resized successfully.");
            }
        }

        注意事项

        • 依赖项:确保你的项目引用了System.Drawing.Common包(对于.NET Core或.NET 5+项目)。
        • 异常处理:在实际应用中,你可能需要添加更多的异常处理代码来处理文件读取、写入失败等情况。
        • 性能:对于大图片或批量处理,考虑使用更高效的图像处理库,如ImageSharp

        这个示例代码展示了如何读取一个图片文件,调整其尺寸以保持宽高比,并将调整后的图片保存到指定路径。

        © 版权声明
        THE END
        喜欢就点个赞,支持一下吧!
        点赞31 分享
        评论 抢沙发
        头像
        欢迎您留下评论!
        提交
        头像

        昵称

        取消
        昵称表情代码图片

          暂无评论内容