文章目录
- 前言
- 一、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库在性能上会自动使用硬件加速,相对来说也是更优的。
“笑对人生,智慧同行!博客新文出炉,微信订阅号更新更实时,等你笑纳~”
 

![World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2](https://i-blog.csdnimg.cn/direct/40c2276b92274dd9a09cc9d9b0d5eec8.jpeg)















![[RAG]喂饭教程!Neo4J可视化GraphRAG索引](https://img-blog.csdnimg.cn/direct/6d6578edf1e8481988416eec068660ba.jpeg#pic_center)

