如何在 .NET Core 中使用 System.Drawing?
Microsoft 发布了System.Drawing.Common以提供跨平台访问 GDI+ 图形功能。
这是一个超级简单的应用程序,可将 PNG 大小调整为 128x128。然而,它是一个 .NET Core 应用程序,并且可以在 Windows 和 Linux(Ubuntu!)
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; namespace imageresize { class Program { static void Main(string[] args) { int width = 128; int height = 128; var file = args[0]; Console.WriteLine($"Loading {file}"); using(FileStream pngStream = new FileStream(args[0],FileMode.Open, FileAccess.Read)) using(var image = new Bitmap(pngStream)) { var resized = new Bitmap(width, height); using (var graphics = Graphics.FromImage(resized)) { graphics.CompositingQuality = CompositingQuality.HighSpeed; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.CompositingMode = CompositingMode.SourceCopy; graphics.DrawImage(image, 0, 0, width, height); resized.Save($"resized-{file}", ImageFormat.Png); Console.WriteLine($"Saving resized-{file} thumbnail"); } } } } }
现在 .NET Core 上有很多很棒的图像处理选项!重要的是要了解此 System.Drawing 层非常适合现有的 System.Drawing 代码,但您可能不应该用它编写新的图像管理代码。相反,请考虑其他优秀的开源选项之一。
- ImageSharp - 用于处理图像文件的跨平台库;用 C# 编写
- 与
System.Drawing
ImageSharp 相比,它能够开发出更灵活、更容易编码、并且更不容易出现内存泄漏的东西。系统范围的进程锁已经不复存在;ImageSharp 图像是线程安全的,并且在 Web 环境中得到完全支持。
- 与
以下是使用 ImageSharp 调整某些内容大小的方法:
using (Image<Rgba32> image = Image.Load("foo.jpg")) { image.Mutate(x => x .Resize(image.Width / 2, image.Height / 2) .Grayscale()); image.Save("bar.jpg"); // Automatic encoder selected based on extension. }
- Magick.NET - ImageMagick 之上的 .NET 库
- SkiaSharp - Google 跨平台 Skia 库之上的 .NET 包装器