1. NetCore ZKweb

      在我第一次绘制图形验证码时是采用的ZKweb的绘制库,奉上代码参考

    

   public byte[] GetVerifyCode(out string code)
{
code = string.Empty;
int codeW = ;
int codeH = ;
int fontSize = ;
string chkCode = string.Empty;
Random rnd = new Random();
//颜色列表,用于验证码、噪线、噪点
System.DrawingCore.Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
//字体列表,用于验证码
string[] font = { "Times New Roman" };
//验证码的字符集,去掉了一些容易混淆的字符
char[] character = { '', '', '', '', '', '', '', 'a', 'b', 'd', 'e', 'f', 'h', 'k', 'm', 'n', 'r', 'x', 'y', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
//生成验证码字符串
for (int i = ; i < ; i++)
{
chkCode += character[rnd.Next(character.Length)];
}
code = chkCode; //创建画布
Bitmap bmp = new Bitmap(codeW, codeH);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
//画噪线
for (int i = ; i < ; i++)
{
int x1 = rnd.Next(codeW);
int y1 = rnd.Next(codeH);
int x2 = rnd.Next(codeW);
int y2 = rnd.Next(codeH);
Color clr = color[rnd.Next(color.Length)];
g.DrawLine(new Pen(clr), x1, y1, x2, y2);
}
//画验证码字符串
for (int i = ; i < chkCode.Length; i++)
{
string fnt = font[rnd.Next(font.Length)];
Font ft = new Font(fnt, fontSize);
Color clr = color[rnd.Next(color.Length)];
g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * , (float));
}
//将验证码图片写入内存流,并将其以 "image/Png" 格式输出
MemoryStream ms = new MemoryStream();
try
{
bmp.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
catch (Exception)
{
return null;
}
finally
{
g.Dispose();
bmp.Dispose();
}
}

这个开始用的还不错,但是今天更新了VS到15.7版这个就产生了一个很恶心的问题,ZKweb的引用库和项目自带的Core.All好几个dll冲突,这两个一个是ZKweb的依赖库一个是项目的依赖库 都没法重新引用,百度了很久后决定放弃ZKweb.改用SkiaSharp

2. SkiaSharp

这个百度上的搜索结果没有一个是给了可用代码的。ε=(´ο`*)))唉 而且大部分都是一个人放出来的代码 好吧开始自己整。先上代码

  public IActionResult Code()
{
#region 反射SK支持的全部颜色
//List<SKColor> colors = new List<SKColor>();
//var skcolors = new SKColors();
//var type = skcolors.GetType();
//foreach (FieldInfo field in type.GetFields())
//{
// colors.Add( (SKColor)field.GetValue(skcolors));
//}
#endregion //int maxcolorindex = colors.Count-1;
string text = "1A3V";
var zu = text.ToList();
SKBitmap bmp = new SKBitmap(, );
using (SKCanvas canvas = new SKCanvas(bmp))
{
//背景色
canvas.DrawColor(SKColors.White); using (SKPaint sKPaint = new SKPaint())
{
sKPaint.TextSize = ;//字体大小
sKPaint.IsAntialias = true;//开启抗锯齿
sKPaint.Typeface = SKTypeface.FromFamilyName("微软雅黑", SKTypefaceStyle.Bold);//字体
SKRect size = new SKRect();
sKPaint.MeasureText(zu[].ToString(), ref size);//计算文字宽度以及高度 float temp = (bmp.Width/ - size.Size.Width)/;
float temp1 = bmp.Height - (bmp.Height - size.Size.Height) / ;
Random random = new Random(); for (int i = ; i < ; i++)
{ sKPaint.Color = new SKColor((byte)random.Next(,), (byte)random.Next(, ), (byte)random.Next(, ));
canvas.DrawText(zu[i].ToString(), temp + *i, temp1, sKPaint);//画文字
}
//干扰线
for (int i = ; i < ; i++)
{
sKPaint.Color = new SKColor((byte)random.Next(, ), (byte)random.Next(, ), (byte)random.Next(, ));
canvas.DrawLine(random.Next(, ), random.Next(, ), random.Next(, ), random.Next(, ), sKPaint);
}
}
//页面展示图片
using (SKImage img = SKImage.FromBitmap(bmp))
{
using (SKData p = img.Encode())
{
return File(p.ToArray(), "image/Png");
}
}
}
}

这个最大的好处不依赖任何库,不用担心和core自身的dll冲突问题,SkiaSharp的功能还不只这些 英文水平有限好多属性我没没搞明白是什么,比如如何内容旋转啥的 呵呵。。 先记录这些

Net Core 生成图形验证码的更多相关文章

  1. Asp.Net Core 生成图形验证码

    前几天有朋友问我怎么生成图片验证码,话不多说直接上代码. 支持.NET CORE开源.助力.NET Core社区发展. using System; using System.IO; using Sys ...

  2. C#生成图形验证码

    先看效果: 再上代码 public class CaptchaHelper { private static Random rand = new Random(); private static in ...

  3. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  4. PHP5生成图形验证码(有汉字)

    利用PHP5中GD库生成图形验证码 类似于下面这样 1.利用GD库函数生成图片,并在图片上写指定字符 imagecreatetruecolor   新建一个真彩色图像      imagecolora ...

  5. java生成图形验证码

    效果图 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buf ...

  6. ASP.NET中如何生成图形验证码

    通常生成一个图形验证码主要 有3个步骤: (1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置.该字符串可以包含数字.字母等. (2)将随机生成的字符串创建成图片,并显示. (3 ...

  7. python 生成图形验证码

    文章链接:https://mp.weixin.qq.com/s/LYUBRNallHcjnhJb1R3ZBg 日常在网站使用过程中经常遇到图形验证,今天准备自己做个图形验证码,这算是个简单的功能,也适 ...

  8. (转)Android 之生成图形验证码

    import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; impor ...

  9. 【Java】生成图形验证码

    本章介绍一个能生成比较好看的图形验证码类 生成验证码工具类 package com.util; import java.awt.Color; import java.awt.Font; import ...

随机推荐

  1. 高性能C++网络库libtnet实现:http

    HTTP libtnet提供了简单的http支持,使用也很简单. 一个简单的http server: void onHandler(const HttpConnectionPtr_t& con ...

  2. 【Linux 操作系统】Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用

    . : 关机, 如果将Linux默认运行等级设置为0, 系统将无法启动; -- : 多用户模式, 允许使用网络文件系统, 一般不使用图形界面登陆就是这种模式; -- : 多用户图形界面模式, 该模式下 ...

  3. SpriteBuilder中如何给精灵添加帧动画

    首先你必须准备若干幅图片,当然最好做成Smart Sprite Sheet. 打开一个CCB文件,并鼠标选择根节点的CCSprite对象. 保持前者选中且Timeline的当前时间点把手在最左边,然后 ...

  4. TCP 的那些事儿(上)(转)

    本文转载自陈皓博文TCP 的那些事儿(上). TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多 ...

  5. ARM linux常用汇编语法

    汇编语言每行的语法:     lable: instruction  ; comment 段操作: .section           格式: .section 段名 [标志]     [标志]可以 ...

  6. "C#":MySql批量数量导入

    现在对数据库(以MySql为例)的操作大多会封装成一个类,如下例所示: namespace TESTDATABASE { public enum DBStatusCode { ALL_OK, MySq ...

  7. django-debug-tools 使用

    用django开发很快也很容易,但是很多时候我们的经验并不是很足,就会给自己挖下很多坑,不管是性能问题,还是开发语言使用技巧问题都会给应用的稳定带来危害, 开发之后的调试和调优就显得很重要,今天就尝试 ...

  8. Effective STL 为包含指针的关联容器指定比较类型

    // 为包含指针的关联容器指定比较类型.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <set> #incl ...

  9. C# 创建Word项目标号列表、多级编号列表

    在Word文档中,对于有多条并列的信息内容或者段落时,我们常以添加项目标号的形式来使文档条理化,在阅读时,文档也更具美观性.另外,对于在逻辑上存在一定层级结构的内容时,也可以通过多级编号列表来标明文档 ...

  10. spring boot + quartz 集群

    spring boot bean配置: @Configuration public class QuartzConfig { @Value("${quartz.scheduler.insta ...