zoukankan      html  css  js  c++  java
  • .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

    仅做记录

  • 相关阅读:
    字符串样式效果
    javaScript 继承原型链
    javaScript 的继承,call()
    二维数组中的查找
    如何证明一个映射是混沌的。
    netty如何知道连接已经关闭,socket心跳,双工?异步?
    java中线程安全的map是ConcurrentHashMap
    failed to load class "org.sl4j.impl.StaticLoggerBinder"
    Tcp端口以及端口相关协议详解
    Tcp的三次握手,以及原理详解
  • 原文地址:https://www.cnblogs.com/zzfstudy/p/11199017.html
Copyright © 2011-2022 走看看