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

在 C# 中处理图像文件,System.Drawing 和 ImageSharp 是两个主流选择,但它们定位不同:前者是 Windows 传统方案,后者是跨平台现代替代品。选哪个,关键看项目目标、运行环境和维护需求。
System.Drawing:简单直接,但有局限
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:跨平台、内存友好、设计现代
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");支持 WebP/AVIF 等新格式(需额外安装 ImageSharp.WebP 或 ImageSharp.AVIF 包)可精细控制解码参数(如 JPEG 的采样率、渐进式加载)、编码质量、色彩空间转换
缺点是学习曲线略高,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的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442773.html
微信扫一扫
支付宝扫一扫