.NET Core SkiaSharp替代System.Drawing的用法
2024-10-14
55
在.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库类似,旧的代码稍微做一些修改就可以了。
更新于:1个月前赞一波!
相关文章
- Sylvan.Data.Excel 性能优异的开源.NET Excel数据读取库
- ASP.NET Core 中常用的内置中间件
- .NET9 F#有什么新特性?
- .NET 开源 ORM FreeSql 使用教程
- .NET9 C# 13 有哪些新特性?
- .NET9 开始删除内置的 Swagger 支持 可使用Scalar.AspNetCore替代
- .NET 9 中System.Text.Json 的新增功能
- 什么是.NET渐进式Web应用(PWA)
- .NET开发中常见的异常报错原因和解决方法?
- .NET框架和CLR的工作原理?
- ASP.NET MVC与Web Forms的区别
- .NET C#中的IEnumerable和IEnumerator的区别
- 使用ADO.NET连接到南大通用GBase 8s数据库
- 鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?
- ASP.NET Core使用partial标签报错
- .NET 9 即将推出的功能Task.WhenEach
- .NET 使用HttpClientFactory+Polly替代直接使用HttpClient
- .NET Framework被淘汰了吗?
- 强大的 .NET Mock 框架 单元测试模拟库Moq使用教程
- Asp.Net Core进程内托管 和 进程外托管的区别
文章评论
评论问答