欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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和平台特定的绑定:

  1. .net core / .net standard 1.3
  2. xamarin.android
  3. xamarin.ios
  4. xamarin.tvos
  5. xamarin.mac
  6. windows classic desktop (windows.forms / wpf)
  7. 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。