.NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法

        在.NET 6中,微软官方建议把 System.Drawing.Common 迁移到 SkiaSharp 库。因为System.Drawing.Common 被设计为 Window 技术的精简包装器,因此其跨平台实现欠佳。

        SkiaSharp是一个基于谷歌的Skia图形库(Skia.org)的用于.NET平台的跨平台2D图形API

        它提供了一个全面的2D API,可以跨移动、服务器和桌面模型来渲染图像。

        SkiaSharp提供跨平台绑定:.NET Standard 1.3、.NET Core、.NET 6、Tizen、Android、iOS、tvOS、watchOS、macOS、Mac Catalyst、WinUI 3 (Windows App SDK / Uno Platform)、Windows Classic Desktop (Windows.Forms / WPF)、Windows UWP (Desktop / Mobile / Xbox / HoloLens)、Web Assembly (WASM)、Uno Platform (iOS / macOS / Android / WebAssembly / UWP)。

.NET Core中使用SkiaSharp示例

安装SkiaSharp包

NuGet\Install-Package SkiaSharp -Version 2.88.3

使用SkiaSharp调整图片大小:

var rootPath = Directory.GetCurrentDirectory(); // 获取站点根目录using (var file = System.IO.File.OpenRead(rootPath + "\\1.png")) // 读取文件{
    using (var fileStream = new SKManagedStream(file))
    {
        using (var bitmap = SKBitmap.Decode(fileStream))
        {
                // 调整图片到100x80
                using (var resized = bitmap.Resize(new SKImageInfo(100, 80), SKFilterQuality.Medium))
                {
                    if (resized != null)
                    {
                        using (var image = SKImage.FromBitmap(resized))
                        {
                                using (var writeStream = System.IO.File.OpenWrite(rootPath + "\\new-1.png"))
                                {
                                    image.Encode(SKEncodedImageFormat.Png, 80).SaveTo(writeStream); // 保存文件
                                }
                        }
                    }
                }
        }
    }

使用SkiaSharp创建验证码图片:

using (var surface = SKSurface.Create(new SKImageInfo(100, 80)))
{
    var canvas = surface.Canvas;
    canvas.Clear(SKColors.Blue);

    var paint = new SKPaint()
    {
        Color = SKColors.Red,
        IsAntialias = true, // 抗锯齿
        Style = SKPaintStyle.Fill,
        TextAlign = SKTextAlign.Center,
        TextSize = 16f,
        Typeface = SKTypeface.FromFamilyName("Microsoft YaHei", SKFontStyle.Bold)
    };
	
    var coord = new SKPoint(50, 48);
    canvas.DrawText("my text", coord, paint);

    using (var image = surface.Snapshot())
    {
        using (var writeStream = System.IO.File.OpenWrite(rootPath + "\\code-img.png"))
        {
	        image.Encode(SKEncodedImageFormat.Png, 80).SaveTo(writeStream);
        }
    }
}

也可以在canvas上画图片做一些截取图片的操作,可以调用canvas.DrawImage方法。
总体来说用法和原来的System.Drawing.Common库类似,旧的代码稍微做一些修改就可以了。

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值