优先选 ImageSharp;它跨平台、内存友好、支持新格式且线程安全,而 System.Drawing 仅限 Windows、易句柄泄漏且不支持 WebP/AVIF。

在 C# 中处理图像文件,System.Drawing 和 ImageSharp 是两个主流选择,但它们定位不同:前者是 Windows 传统方案,后者是跨平台现代替代品。选哪个,关键看项目目标、运行环境和维护需求。
System.Drawing 是 .NET Framework 时代就存在的 API,基于 GDI+,在 Windows 上稳定高效。.NET Core 3.0+ 起它被标记为“仅限 Windows”,Linux/macOS 下可能崩溃或功能受限(比如字体渲染、某些编码器缺失)。
常见用法示例:
var img = Image.FromFile("photo.jpg");
img.GetThumbnailImage(200, 200, null, IntPtr.Zero).Save("thumb.png");
Graphics.FromImage(img).DrawString("Hello", font, brush, point);
注意:必须手动调用 Dispose() 防止 GDI 句柄泄漏;多线程下不安全,需加锁或改用每个请求新建实例。
ImageSharp 是纯 C# 实现的高性能图像库,支持 .NET Standard 2.0+,Windows/Linux/macOS 全平台一致,无外部依赖,且默认启用内存池与 SIMD 加速(如 AVX2)。
典型操作更明确、更安全:
using var image = await Image.LoadAsync("photo.jpg"); image.Mutate(x => x.Resize(200, 200)); await image.SaveAsync("thumb.jpg");
ImageSharp.WebP 或 ImageSharp.AVIF 包)缺点是学习曲线略高,API 基于不可变图像(Mutate 才修改),对习惯“直接改图”的开发者需要适应。
选 System.Drawing 如果:项目只跑 Windows、代码量小、维护周期短、已有大量 GDI+ 逻辑、不涉及 WebP/HEIC 等新格式。
选 ImageSharp 如果:要部署到 Linux 容器、做高并发图像服务(如 CDN 缩略图)、需要精准控制压缩质量与元数据、长期维护、或用 .NET 6+ 新项目。
迁移建议:旧项目不必强切,但新模块推荐直接用 ImageSharp;若必须保留 System.Drawing,可用 Microsoft.Extensions.DependencyInjection 封装成统一图像服务接口,便于将来替换。
基本上就这些。不复杂但容易忽略的是:别在 ASP.NET Core 请求中长期持有 Image 实例,无论用哪个库,都该即用即释放 —— 尤其是 System.Drawing,在 Linux 容器里真会静默失败。
以上就是C# 如何处理图像文件 - System.Drawing与ImageSharp的详细内容,更多请关注php中文网其它相关文章!
Windows激活工具是正版认证的激活工具,永久激活,一键解决windows许可证即将过期。可激活win7系统、win8.1系统、win10系统、win11系统。下载后先看完视频激活教程,再进行操作,100%激活成功。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号