文章目录
- 前言
- 一、ImageSharp库
- 二、SkiaSharp库
- 三、System.Drawing.Common库
- 总结
前言
在.NET Standard中,System.Drawing.Imaging 命名空间并不直接支持,因为 System.Drawing 命名空间主要是为了Windows Forms(WinForms)和GDI+设计的,而.NET Standard是一个跨平台的规范,旨在定义一套统一的API,使得.NET库能够在所有.NET实现中工作,包括.NET Core、.NET Framework、Xamarin等。
对于需要在.NET Standard项目中进行图像处理的任务,有几种替代方案可以考虑:
一、ImageSharp库
ImageSharp是一个跨平台的.NET图像处理库,它提供了丰富的API来处理图像,包括读取、写入、修改、转换等。它是.NET Standard 2.0及以上版本的兼容库,因此可以在.NET Core、.NET Framework等项目中使用。
安装ImageSharp:
Install-Package SixLabors.ImageSharp
使用ImageSharp进行基本的图像处理:
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
var image = Image.Load<Rgba32>("path_to_your_image.jpg");
image.Mutate(x => x
.Resize(new ResizeOptions {
Size = new Size(100, 100),
Mode = ResizeMode.Max
})
.Grayscale());
image.Save("path_to_save_image.jpg");
该组件库采用分层协议,可能存在法律风险,谨慎使用。
二、SkiaSharp库
SkiaSharp是基于Skia图形库的.NET封装,Skia是一个由Google开发的开源2D图形处理库,支持多种平台。SkiaSharp同样支持.NET Standard,并且提供丰富的图像处理功能。
安装SkiaSharp:
Install-Package SkiaSharp
使用SkiaSharp进行图像处理:
using SkiaSharp;
SKImageInfo info = new SKImageInfo(100, 100);
using (SKBitmap bitmap = new SKBitmap(info))
using (SKCanvas canvas = new SKCanvas(bitmap))
{
SKPaint paint = new SKPaint
{
Color = SKColors.Red,
Style = SKPaintStyle.Fill,
IsAntiAlias = true
};
canvas.DrawRect(new SKRect(0, 0, 100, 100), paint);
using (SKImage image = SKImage.FromEncodedData(SKData.FromEncodedImage(SKEncodedImage.FromEncodedData(File.ReadAllBytes("path_to_your_image.jpg")))))
using (SKData data = image.Encode(SKEncodedImageFormat.Png, 100))
{
using (SKFileWStream wstream = new SKFileWStream("path_to_save_image.png"))
{
data.SaveTo(wstream);
}
}
}
三、System.Drawing.Common库
如果你的应用程序主要运行在Windows上,你也可以考虑在.NET Standard项目中通过条件编译或使用NuGet包来引入对System.Drawing.Common的引用,但请注意这会使你的应用程序依赖于Windows环境。
安装System.Drawing.Common(请注意,它不支持所有.NET Standard版本,并且通常与.NET Core一起使用):
Install-Package System.Drawing.Common
官方说明不支持non-windows
官方说明不支持non-windwos的原因:
但实际上可以通过在Linux上安装libgdiplus库,从而使System.Drawing.Common库有依赖,但是官方说明libgdiplus问题较多,所以此方案还是慎重考虑。
总结
从上述分析,本人更加推荐SkiaSharp库,在达到目的的同时,还可以规避法律风险,同时SkiaSharp库在性能上会自动使用硬件加速,相对来说也是更优的。
“笑对人生,智慧同行!博客新文出炉,微信订阅号更新更实时,等你笑纳~”