如何在 .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.DrawingImageSharp 相比,它能够开发出更灵活、更容易编码、并且更不容易出现内存泄漏的东西。系统范围的进程锁已经不复存在;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 包装器
浙公网安备 33010602011771号