博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net Core 图片验证码 基于SkiaSharp实现
阅读量:5262 次
发布时间:2019-06-14

本文共 8742 字,大约阅读时间需要 29 分钟。

public class ImageCaptcha    {        ///         /// 干扰线的颜色集合        ///         private List
colors { get; set; } public ImageCaptcha() { colors = new List
(); colors.Add(SKColors.AliceBlue); colors.Add(SKColors.PaleGreen); colors.Add(SKColors.PaleGoldenrod); colors.Add(SKColors.Orchid); colors.Add(SKColors.OrangeRed); colors.Add(SKColors.Orange); colors.Add(SKColors.OliveDrab); colors.Add(SKColors.Olive); colors.Add(SKColors.OldLace); colors.Add(SKColors.Navy); colors.Add(SKColors.NavajoWhite); colors.Add(SKColors.Moccasin); colors.Add(SKColors.MistyRose); colors.Add(SKColors.MintCream); colors.Add(SKColors.MidnightBlue); colors.Add(SKColors.MediumVioletRed); colors.Add(SKColors.MediumTurquoise); colors.Add(SKColors.MediumSpringGreen); colors.Add(SKColors.LightSlateGray); colors.Add(SKColors.LightSteelBlue); colors.Add(SKColors.LightYellow); colors.Add(SKColors.Lime); colors.Add(SKColors.LimeGreen); colors.Add(SKColors.Linen); colors.Add(SKColors.PaleTurquoise); colors.Add(SKColors.Magenta); colors.Add(SKColors.MediumAquamarine); colors.Add(SKColors.MediumBlue); colors.Add(SKColors.MediumOrchid); colors.Add(SKColors.MediumPurple); colors.Add(SKColors.MediumSeaGreen); colors.Add(SKColors.MediumSlateBlue); colors.Add(SKColors.Maroon); colors.Add(SKColors.PaleVioletRed); colors.Add(SKColors.PapayaWhip); colors.Add(SKColors.PeachPuff); colors.Add(SKColors.Snow); colors.Add(SKColors.SpringGreen); colors.Add(SKColors.SteelBlue); colors.Add(SKColors.Tan); colors.Add(SKColors.Teal); colors.Add(SKColors.Thistle); colors.Add(SKColors.SlateGray); colors.Add(SKColors.Tomato); colors.Add(SKColors.Violet); colors.Add(SKColors.Wheat); colors.Add(SKColors.White); colors.Add(SKColors.WhiteSmoke); colors.Add(SKColors.Yellow); colors.Add(SKColors.YellowGreen); colors.Add(SKColors.Turquoise); colors.Add(SKColors.LightSkyBlue); colors.Add(SKColors.SlateBlue); colors.Add(SKColors.Silver); colors.Add(SKColors.Peru); colors.Add(SKColors.Pink); colors.Add(SKColors.Plum); colors.Add(SKColors.PowderBlue); colors.Add(SKColors.Purple); colors.Add(SKColors.Red); colors.Add(SKColors.SkyBlue); colors.Add(SKColors.RosyBrown); colors.Add(SKColors.SaddleBrown); colors.Add(SKColors.Salmon); colors.Add(SKColors.SandyBrown); colors.Add(SKColors.SeaGreen); colors.Add(SKColors.SeaShell); colors.Add(SKColors.Sienna); colors.Add(SKColors.RoyalBlue); colors.Add(SKColors.LightSeaGreen); colors.Add(SKColors.LightSalmon); colors.Add(SKColors.LightPink); colors.Add(SKColors.Crimson); colors.Add(SKColors.Cyan); colors.Add(SKColors.DarkBlue); colors.Add(SKColors.DarkCyan); colors.Add(SKColors.DarkGoldenrod); colors.Add(SKColors.DarkGray); colors.Add(SKColors.Cornsilk); colors.Add(SKColors.DarkGreen); colors.Add(SKColors.DarkMagenta); colors.Add(SKColors.DarkOliveGreen); colors.Add(SKColors.DarkOrange); colors.Add(SKColors.DarkOrchid); colors.Add(SKColors.DarkRed); colors.Add(SKColors.DarkSalmon); colors.Add(SKColors.DarkKhaki); colors.Add(SKColors.DarkSeaGreen); colors.Add(SKColors.CornflowerBlue); colors.Add(SKColors.Chocolate); colors.Add(SKColors.AntiqueWhite); colors.Add(SKColors.Aqua); colors.Add(SKColors.Aquamarine); colors.Add(SKColors.Azure); colors.Add(SKColors.Beige); colors.Add(SKColors.Bisque); colors.Add(SKColors.Coral); colors.Add(SKColors.Black); colors.Add(SKColors.Blue); colors.Add(SKColors.BlueViolet); colors.Add(SKColors.Brown); colors.Add(SKColors.BurlyWood); colors.Add(SKColors.CadetBlue); colors.Add(SKColors.Chartreuse); colors.Add(SKColors.BlanchedAlmond); colors.Add(SKColors.Transparent); colors.Add(SKColors.DarkSlateBlue); colors.Add(SKColors.DarkTurquoise); colors.Add(SKColors.IndianRed); colors.Add(SKColors.Indigo); colors.Add(SKColors.Ivory); colors.Add(SKColors.Khaki); colors.Add(SKColors.Lavender); colors.Add(SKColors.LavenderBlush); colors.Add(SKColors.HotPink); colors.Add(SKColors.LawnGreen); colors.Add(SKColors.LightBlue); colors.Add(SKColors.LightCoral); colors.Add(SKColors.LightCyan); colors.Add(SKColors.LightGoldenrodYellow); colors.Add(SKColors.LightGray); colors.Add(SKColors.LightGreen); colors.Add(SKColors.LemonChiffon); colors.Add(SKColors.DarkSlateGray); colors.Add(SKColors.Honeydew); colors.Add(SKColors.Green); colors.Add(SKColors.DarkViolet); colors.Add(SKColors.DeepPink); colors.Add(SKColors.DeepSkyBlue); colors.Add(SKColors.DimGray); colors.Add(SKColors.DodgerBlue); colors.Add(SKColors.Firebrick); colors.Add(SKColors.GreenYellow); colors.Add(SKColors.FloralWhite); colors.Add(SKColors.Fuchsia); colors.Add(SKColors.Gainsboro); colors.Add(SKColors.GhostWhite); colors.Add(SKColors.Gold); colors.Add(SKColors.Goldenrod); colors.Add(SKColors.Gray); colors.Add(SKColors.ForestGreen); } ///
/// 创建画笔 /// ///
///
///
private SKPaint CreatePaint(SKColor color, float fontSize) { SkiaSharp.SKTypeface font = SKTypeface.FromFamilyName(null, SKFontStyleWeight.SemiBold, SKFontStyleWidth.ExtraCondensed, SKFontStyleSlant.Upright); SKPaint paint = new SKPaint(); paint.IsAntialias = true; paint.Color = color; paint.Typeface = font; paint.TextSize = fontSize; return paint; } ///
/// 获取验证码 /// ///
验证码文字 ///
图片宽度 ///
图片高度 ///
干扰线数量 ///
干扰线宽度 ///
public byte[] GetCaptcha(string captchaText,int width,int height,int lineNum=1,int lineStrookeWidth=1) { //创建bitmap位图 using (SKBitmap image2d = new SKBitmap(width, height, SKColorType.Bgra8888, SKAlphaType.Premul)) { //创建画笔 using (SKCanvas canvas = new SKCanvas(image2d)) { //填充背景颜色为白色 canvas.DrawColor(SKColors.White); //将文字写到画布上 using (SKPaint drawStyle = CreatePaint(SKColors.Black, height)) { canvas.DrawText(captchaText, 1, height-1, drawStyle); } //画随机干扰线 using (SKPaint drawStyle = new SKPaint()) { Random random = new Random(); for (int i = 0; i < lineNum; i++) { drawStyle.Color = colors[random.Next(colors.Count)]; drawStyle.StrokeWidth = lineStrookeWidth; canvas.DrawLine(random.Next(0,width), random.Next(0, height), random.Next(0, width), random.Next(0, height), drawStyle); } } //返回图片byte using (SKImage img = SKImage.FromBitmap(image2d)) { using (SKData p = img.Encode(SKEncodedImageFormat.Png, 100)) { return p.ToArray(); } } } } } }
View Code

仅做记录

转载于:https://www.cnblogs.com/zzfstudy/p/11199017.html

你可能感兴趣的文章
10个著名的思想实验1
查看>>
composer 报 zlib_decode(): data error
查看>>
linux下WPS的使用
查看>>
Web Api 利用 cors 实现跨域
查看>>
hdu 3938 并查集
查看>>
instanceof
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
2015/8/4 告别飞思卡尔,抛下包袱上路
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
C# GC 垃圾回收机制
查看>>
mysqladmin 修改和 初始化密码
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>