打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
.net Core 图片验证码 基于SkiaSharp实现
 public class ImageCaptcha    {        /// <summary>        /// 干扰线的颜色集合        /// </summary>        private List<SKColor> colors { get; set; }        public ImageCaptcha()        {            colors = new List<SKColor>();            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);        }        /// <summary>        /// 创建画笔        /// </summary>        /// <param name="color"></param>        /// <param name="fontSize"></param>        /// <returns></returns>        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;        }        /// <summary>        /// 获取验证码        /// </summary>        /// <param name="captchaText">验证码文字</param>        /// <param name="width">图片宽度</param>        /// <param name="height">图片高度</param>        /// <param name="lineNum">干扰线数量</param>        /// <param name="lineStrookeWidth">干扰线宽度</param>        /// <returns></returns>        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.icode9.com/content-4-335301.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
保护您眼睛的方法(每天用电脑超过4个小时的请进)
【嗨撸单词】单复数意义不同的名词
Indian Festival of Colors marked in Vancouver
WPF 颜色渐变
49.Adding Shapes
win8如何修改窗口背景颜色为保护视力的豆沙绿
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服