在 C# (.NET) 中处理图像:完整指南

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

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

开始课程

在 C# (.NET) 中处理图像:从基础到高级技术



图像处理是现代开发中的关键任务之一。在 C# (.NET) 生态系统中,有多个强大的图形处理库,从内置的 System.Drawing 到现代的跨平台解决方案,如 ImageSharp 和 SkiaSharp。在本文中,我们将详细讨论主要方法,提供代码示例并给出实用建议。



1. .NET 图像处理库概览



库的选择取决于您的任务和平台。以下是三个主要选项:



  • System.Drawing.Common — 微软的经典库,在 .NET 6+ 中可用。在 Windows 上通过 GDI+ 运行,但在 Linux/macOS 上有限制。
  • SixLabors.ImageSharp — 完全托管的跨平台库。支持 JPEG、PNG、BMP、GIF、WebP 格式。非常适合 Web 应用程序和服务器端处理。
  • SkiaSharp — 基于 Skia 引擎(用于 Chrome、Flutter)的封装。提供高性能和广泛的 2D 图形功能,包括图像、文本和矢量图形处理。


对于大多数现代项目,推荐使用 ImageSharp — 它易于使用,积极开发,且不依赖平台。



2. 安装和引用库



通过 NuGet 包管理器(或 .NET CLI)安装:



// 对于 ImageSharpdotnet add package SixLabors.ImageSharp

// 对于 SkiaSharpdotnet add package SkiaSharp

// 对于 System.Drawing(如果需要)dotnet add package System.Drawing.Common


3. 以 ImageSharp 为例的基本图像操作



我们将介绍主要操作:加载、调整大小、裁剪、应用滤镜和保存。



3.1 加载和显示信息



using SixLabors.ImageSharp;using SixLabors.ImageSharp.PixelFormats;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ Console.WriteLine($"宽度: {image.Width}, 高度: {image.Height}"); Console.WriteLine($"像素格式: {image.PixelType}");}


3.2 保持比例调整大小



using SixLabors.ImageSharp.Processing;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ int newWidth = 800; int newHeight = (int)((float)image.Height / image.Width * newWidth);

image.Mutate(x => x.Resize(newWidth, newHeight)); image.Save("output_resized.jpg");}


3.3 裁剪中心部分



using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){    int cropSize = Math.Min(image.Width, image.Height);    var rect = new Rectangle(        (image.Width - cropSize) / 2,        (image.Height - cropSize) / 2,        cropSize,        cropSize    );

image.Mutate(x => x.Crop(rect)); image.Save("output_cropped.jpg");}


3.4 应用滤镜(黑白、模糊)



using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Processing.Processors.Transforms;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ // 黑白滤镜 image.Mutate(x => x.Grayscale());

// 高斯模糊(半径 5) image.Mutate(x => x.GaussianBlur(5));

image.Save("output_filtered.jpg");}


4. 处理格式和质量



ImageSharp 允许为每种格式设置保存参数:



using SixLabors.ImageSharp.Formats.Jpeg;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ var encoder = new J

推荐