C#图像处理:调整大小与裁剪(resize, crop)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C#图像处理:调整大小与裁剪(resize, crop)



在现代Web开发和桌面应用程序中,经常需要以编程方式处理图像:缩小图像以加快加载速度、创建缩略图或裁剪多余边缘。在.NET生态系统中,有几种方法可以解决这些任务。在本文中,我们将介绍在C#中调整大小(resize)和裁剪(crop)图像的两种主要方式:经典的System.Drawing和现代的跨平台SixLabors.ImageSharp。



1. 使用System.Drawing(Windows Forms / .NET Framework)

经典方法,适用于.NET Framework和.NET Core/5+(在Linux/macOS上有限制)。通过命名空间System.Drawing和类Bitmap工作。适用于旧项目或仅限Windows的应用程序。



示例:保持比例调整大小

using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;

public static Bitmap ResizeImage(Image image, int newWidth, int newHeight){ var destRect = new Rectangle(0, 0, newWidth, newHeight); var destImage = new Bitmap(newWidth, newHeight);

using (var graphics = Graphics.FromImage(destImage)) { graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); } } return destImage;}

// 使用方式:using (var original = Image.FromFile("input.jpg")){ using (var resized = ResizeImage(original, 800, 600)) { resized.Save("output.jpg", ImageFormat.Jpeg); }}


示例:裁剪(crop)图像

public static Bitmap CropImage(Image source, Rectangle cropArea){    var bmp = new Bitmap(cropArea.Width, cropArea.Height);    using (var g = Graphics.FromImage(bmp))    {        g.DrawImage(source, new Rectangle(0, 0, bmp.Width, bmp.Height),                    cropArea, GraphicsUnit.Pixel);    }    return bmp;}

// 使用方式:var cropRect = new Rectangle(100, 50, 300, 200); // X, Y, Width, Heightusing (var cropped = CropImage(Image.FromFile("input.jpg"), cropRect)){ cropped.Save("cropped.jpg", ImageFormat.Jpeg);}


2. SixLabors.ImageSharp(跨平台.NET)

SixLabors.ImageSharp 是一个现代的、完全托管的图像处理库,可在.NET Core、.NET 5/6/7+和.NET Framework上运行。它不依赖于Windows API,因此非常适合Web应用程序(ASP.NET Core)、控制台工具和Docker容器。



通过NuGet安装:

dotnet add package SixLabors.ImageSharp


示例:保持比例调整大小

using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;

public static void ResizeImageSharp(string inputPath, string outputPath, int width, int height){ using (var image = Image.Load(inputPath)) { // ResizeMode.Pad模式 — 将图像嵌入,添加透明/白色边距 // ResizeMode.Crop模式 — 裁剪至指定尺寸 // ResizeMode.Max模式 — 保持比例,嵌入矩形内 image.Mutate(x => x.Resize(width, height, KnownResamplers.Lanczos3)); image.Save(outputPath); }}

// 保持比例的示例(自

推荐