C# (.NET) 图像处理:库与代码示例

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

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

开始课程

C# (.NET) 图像处理:库概览与实战示例

图像处理是构建现代 Web 应用、桌面程序和移动服务时的关键任务之一。在 C# (.NET) 生态系统中,有多个强大的库可用于加载、编辑、分析和保存图像。本文将介绍主要方法:从经典的 System.Drawing 到现代的跨平台解决方案 ImageSharp 和 SkiaSharp。



1. System.Drawing.Common — .NET 经典库

System.Drawing.Common 库在 .NET Core/.NET 5+ 中作为 NuGet 包提供。它提供了熟悉的 API 用于处理位图图像(BMP、JPEG、PNG、GIF、TIFF)。
注意: 在 Linux 和 macOS 上需要安装 libgdiplus 库。



安装

dotnet add package System.Drawing.Common


示例:加载、调整大小和保存

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

public class ImageProcessor{ public void ResizeImage(string inputPath, string outputPath, int maxWidth, int maxHeight) { using var original = Image.FromFile(inputPath); var ratio = Math.Min((double)maxWidth / original.Width, (double)maxHeight / original.Height); int newWidth = (int)(original.Width * ratio); int newHeight = (int)(original.Height * ratio);

using var bitmap = new Bitmap(newWidth, newHeight); using var graphics = Graphics.FromImage(bitmap); graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(original, 0, 0, newWidth, newHeight);

bitmap.Save(outputPath, ImageFormat.Jpeg); }}


2. ImageSharp (SixLabors) — 现代跨平台库

SixLabors.ImageSharp 是一个纯托管库,不依赖任何原生组件。非常适合服务器应用、Web 服务和云函数。支持扩展格式(WebP、HEIF、AVIF)和高级处理功能。



安装

dotnet add package SixLabors.ImageSharp


示例:添加水印

using SixLabors.ImageSharp;using SixLabors.ImageSharp.Drawing.Processing;using SixLabors.ImageSharp.Processing;using SixLabors.Fonts;

public async Task AddWatermarkAsync(string inputPath, string outputPath, string watermarkText){ using var image = await Image.LoadAsync(inputPath); var font = SystemFonts.CreateFont("Arial", 48, FontStyle.Bold);

image.Mutate(ctx => { ctx.DrawText(watermarkText, font, Color.White, new PointF(50, 50)); });

await image.SaveAsync(outputPath);}


3. SkiaSharp — Google 图形引擎

SkiaSharp 是 Skia 库(用于 Chrome、Flutter、Android)的封装。提供高性能、底层像素访问以及复杂矢量变换支持。



安装

dotnet add package SkiaSharp


示例:应用模糊滤镜

using SkiaSharp;

public void ApplyBlur(string inputPath, string outputPath, float sigma){ using var inputStream = File.OpenRead(inputPath); using var original = SKBitmap.Decode(inputStream); using var surface = new SKCanvas(original);

var paint = new SKPaint { ImageFilter = SKImageFilter.CreateBlur(sigma, sigma) }; surface.DrawBitmap(original, 0, 0, paint);

using var image = SKImage.FromBitmap(original); using var data = image.Encode(SKEncodedImageFormat.Jpeg, 90); using var outputStream = File.OpenWrite(outputPath); data.SaveTo(outputStream);\

推荐