C# (.NET)图像处理:调整大小和裁剪(resize, crop)
在现代Web开发和桌面应用程序创建中,经常需要以编程方式处理图像:为预览调整大小(resize)、裁剪(crop)多余边缘或适配特定格式。.NET平台提供了多种解决这些任务的方法。本文将详细讲解如何使用SixLabors.ImageSharp库——一个功能强大、跨平台的C#图像处理工具。
为什么选择ImageSharp?
以前的标准解决方案是System.Drawing库,但它存在局限性:仅适用于Windows,需要安装GDI+组件,且未针对现代Web应用程序进行优化。ImageSharp没有这些缺点:
- 完全用托管C#代码编写。
- 可在Windows、Linux、macOS上运行。
- 支持流行格式:JPEG、PNG、BMP、GIF、WebP。
- 高性能且安全。
安装库
首先,创建一个新的C#项目(.NET 6+),并通过NuGet安装包:
dotnet add package SixLabors.ImageSharp或者通过Visual Studio的包管理器:Install-Package SixLabors.ImageSharp。
调整图像大小(Resize)
resize功能允许缩小或放大图片,同时保持比例或指定精确尺寸。看一个示例,我们加载一张图像并将其宽度缩小到300像素,高度自动调整:
using SixLabors.ImageSharp;using SixLabors.ImageSharp.Processing;
// 加载原始图像using (Image image = Image.Load("input.jpg")){ // 调整大小:宽度300,高度自动计算 image.Mutate(x => x.Resize(300, 0));
// 保存结果 image.Save("output_resize.jpg");}第二个参数0表示高度将自动计算以保持比例。如果需要指定精确尺寸(例如300x200),请同时指定两个值:
image.Mutate(x => x.Resize(300, 200)); // 可能导致比例失真要在精确尺寸下保持比例,请使用ResizeMode.Pad或ResizeMode.Crop模式:
image.Mutate(x => x.Resize(new ResizeOptions{ Size = new Size(300, 200), Mode = ResizeMode.Crop // 裁剪边缘以适配尺寸}));裁剪图像(Crop)
裁剪(crop)允许从原始图像中切出一个矩形区域。这对于创建头像、缩略图或删除空白区域非常有用。示例——裁剪出200x150像素的中心区域:
using (Image image = Image.Load("input.jpg")){ // 定义裁剪区域的坐标和尺寸 Rectangle cropRect = new Rectangle( x: (image.Width - 200) / 2, // 水平居中 y: (image.Height - 150) / 2, // 垂直居中 width: 200, height: 150 );
// 执行裁剪 image.Mutate(x => x.Crop(cropRect));
// 保存结果 image.Save("output_crop.jpg");}如果需要手动裁剪图像(例如左上角100x100区域):
image.Mutate(x => x.Crop(new Rectangle(0, 0, 100, 100)));组合操作:resize + crop
通常需要先调整大小,然后裁剪到所需格式。ImageSharp允许将操作链接起来:
using (Image image = Image.Load("input.jpg")){ // 步骤1:缩小到宽度400像素(按比例) image.Mutate(x =>