CSharp

Captcha

Install

dotnet add package SixLabors.ImageSharp.Drawing

Captcha

public static byte[] Captcha(string text){
    int width = 150, height = 50;
    using Image img  = new Image<Rgba32>(width, height);
    var font = SystemFonts.CreateFont("Arial", 20);
    var location = new PointF(5, 5);
    Random random = new Random();
    img.Mutate(p =>{
        float x = 20;
        float y = random.Next(5, 20);
        foreach(char ch in text){
            float angle = random.Next(-20, 20);
            var location = new PointF(x, y);
            p.DrawText(new DrawingOptions{
                Transform = Matrix3x2.CreateRotation(MathF.PI * angle / 180, location),
            }, ch.ToString(), font, Color.Black, location);
            x += 25;
        }
        for (int i = 0; i < 4; i++){
            var p1 = new PointF(random.Next(width), random.Next(height));
            var p2 = new PointF(random.Next(width), random.Next(height));
            p.DrawLine(Color.Gray,random.Next(1, 3), p1, p2);
        }
        //p.DrawText(text, font, Color.Black, location); 
    });
    using(MemoryStream ms  = new MemoryStream()){
        img.SaveAsPng(ms);
        return ms.ToArray();
    }
}

Action Captcha

public IActionResult Captcha(){
    string text = Helper.RandomString(5);
    HttpContext.Session.SetString("captcha", text);
    return File(Helper.Captcha(text), "image/png");
}

Using Captcha

<img src="/home/captcha" alt="captcha">