C#图像处理:使用ImageSharp库进行缩放和裁剪

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

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

开始课程

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 =>                    

推荐