ASP.NET Core使用SkiaSharp实现验证码的示例代码
程序员文章站
2022-04-29 12:16:43
前言
本文并没有实现一个完成的验证码样例,只是提供了在当前.net core 2.0下使用drawing api的另一种思路,并以简单demo的形式展示出来。
skia...
前言
本文并没有实现一个完成的验证码样例,只是提供了在当前.net core 2.0下使用drawing api的另一种思路,并以简单demo的形式展示出来。
skia
skia是一个开源的二维图形库,提供各种常用的api,并可在多种软硬件平台上运行。谷歌chrome浏览器、chrome os、安卓、火狐浏览器、火狐操作系统以及其它许多产品都使用它作为图形引擎。
skia由谷歌出资管理,任何人都可基于bsd免费软件许可证使用skia。skia开发团队致力于开发其核心部分, 并广泛采纳各方对于skia的开源贡献。
skiasharp
skiasharp是由mono发起,基于谷歌的skia图形库,实现的一个跨平台的2d图形.net api绑定。提供一个全面的2d api,可用于跨移动、服务器和桌面模式的图形渲染和图像处理。
skiasharp提供pcl和平台特定的绑定:
- .net core / .net standard 1.3
- xamarin.android
- xamarin.ios
- xamarin.tvos
- xamarin.mac
- windows classic desktop (windows.forms / wpf)
- windows uwp (desktop / mobile / xbox / hololens)
使用skiasharp
dotnet add package skiasharp --version 1.59.3
asp.net验证码
前使用skiasharp实现文本绘图功能,代码如下:
internal static byte[] getcaptcha(string captchatext) { byte[] imagebytes = null; int image2d_x = 0; int image2d_y = 0; skrect size; int compensatedeepcharacters = 0; using (skpaint drawstyle = createpaint()) { compensatedeepcharacters = (int)drawstyle.textsize / 5; if (system.stringcomparer.ordinal.equals(captchatext, captchatext.toupperinvariant())) compensatedeepcharacters = 0; size = skiahelpers.measuretext(captchatext, drawstyle); image2d_x = (int)size.width + 10; image2d_y = (int)size.height + 10 + compensatedeepcharacters; } using (skbitmap image2d = new skbitmap(image2d_x, image2d_y, skcolortype.bgra8888, skalphatype.premul)) { using (skcanvas canvas = new skcanvas(image2d)) { canvas.drawcolor(skcolors.black); // clear using (skpaint drawstyle = createpaint()) { canvas.drawtext(captchatext, 0 + 5, image2d_y - 5 - compensatedeepcharacters, drawstyle); } using (skimage img = skimage.frombitmap(image2d)) { using (skdata p = img.encode(skencodedimageformat.png, 100)) { imagebytes = p.toarray(); } } } } return imagebytes; }
asp.net core输出图像:
[httpget("/api/captcha")] public iactionresult captcha() { var bytes = skiacaptcha.captcha.getcaptcha("hello world"); return file(bytes, "image/png"); }
参考
https://github.com/mono/skiasharp
https://developer.xamarin.com/api/namespace/skiasharp/
demo地址:https://github.com/maxzhang1985/aspnetcore_captcha_skia
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
node实现登录图片验证码的示例代码
-
ASP.NET MVC5 实现分页查询的示例代码
-
.Net Core中使用ref和Span
提高程序性能的实现代码 -
使用CodeMirror实现Python3在线编辑器的示例代码
-
.Net Core中使用ref和Span
提高程序性能的实现代码 -
ThinkPHP5.1验证码功能实现的示例代码
-
使用mint-ui实现省市区三级联动效果的示例代码
-
ASP.NET Core MVC 中实现中英文切换的示例代码
-
vue使用Google地图的实现示例代码
-
在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)