SkiaSharp:.NET强大而灵活的跨平台图形库

2024-01-28 17:44

本文主要是介绍SkiaSharp:.NET强大而灵活的跨平台图形库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在.Net 6之前,我们一般是使用System.Drawing.Common来生成图像。

但在.Net 6平台需要配置,才能在非Windows平台使用System.Drawing.Common。而从.Net 7开始,非Windows不再允许使用,官方也给我们推荐了几个替代库。

图片

今天我们一起来了解下,免费开源图像库:SkiaSharp。

01

项目简介

SkiaSharp是基于Google的Skia图形库的.NET封装,是一个用于2D图像绘制的开源库,无论桌面应用程序、移动应用还是Web应用,都可以使用。

.Net开发人员可以利用这个强大而灵活的跨平台图形库,来实现高质量的图形绘制和渲染。

02

项目特性

**1、跨平台:**支持多种操作系统,包括Windows、macOS、iOS、Android以及其他.NET Core兼容的平台。

**2、高性能:**支持硬件加速技术,提供高效的图形渲染能力,都可以保证在任何平台应用流畅的用户体验;

**3、易用性:**提供了直观的API,使得开发人员可以轻松地在.NET应用程序中绘制各种形状、文本和图像。此外还提供了WPF和WinForms的控件,简化开发难度与工作量。

**4、丰富的图形功能:**除了提供基本的绘图操作,还提供很多复杂的图形效果,如阴影、渐变和纹理。

5、支持多种文本渲染:无论是矢量字体还是位图字体,都提供了强大的文本渲染能力。

**6、社区活跃:**在Github已收获3.9K的Star。

图片

03

使用示例

1、安装依赖库

图片

2、验证码示例代码

using SkiaSharp;//图片宽度
var width = 90;
//图片高度
var height = 30;
//生成随机验证码
var code = CreateValidateCode(4);// 创建一个SkiaSharp画布  
using (var surface = SKSurface.Create(new SKImageInfo(width, height)))
{var canvas = surface.Canvas;// 清除画布  canvas.Clear(SKColors.White);// 使用SkiaSharp绘制验证码文本  using (var textPaint = new SKPaint()){textPaint.Color = SKColors.Black;textPaint.IsAntialias = true;textPaint.TextSize = height * 0.8f; // 设置文本大小  textPaint.StrokeWidth = 3;var textBounds = new SKRect();textPaint.MeasureText(code, ref textBounds);var xText = (width - textBounds.Width) / 2;var yText = (height - textBounds.Height) / 2 - textBounds.Top;canvas.DrawText(code, xText, yText, textPaint);}// 绘制干扰线  using (var linePaint = new SKPaint()){// 半透明黑色  linePaint.Color = new SKColor(0, 0, 0, 128);linePaint.StrokeWidth = 1;linePaint.IsAntialias = true;var random = new Random();for (int i = 0; i < 5; i++) // 绘制5条干扰线  {float x1 = 0;float y1 = random.Next(height);float x2 = width;float y2 = random.Next(height);canvas.DrawLine(x1, y1, x2, y2, linePaint);}}// 保存图像到文件  using (var image = surface.Snapshot())using (var data = image.Encode()){File.WriteAllBytes("code.png", data.ToArray());}
}/// <summary>
///  随机生成验证码
/// </summary>
/// <param name="len"></param>
/// <returns></returns>
string CreateValidateCode(int len)
{// 可选字符集  const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";// 创建一个新的随机数生成器  Random random = new Random();// 生成验证码  string code = new string(Enumerable.Repeat(chars, len).Select(s => s[random.Next(s.Length)]).ToArray());return code;
}

3、效果

图片

04

项目地址

https://github.com/mono/SkiaSharp

该开源库,我在 知识星球 的框架教程中也有运用,使用示例如下:

图片

- End -

这篇关于SkiaSharp:.NET强大而灵活的跨平台图形库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654338

相关文章

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr