SixLaborsCaptcha is a simple cross-platform NuGet package for generating image captcha.
- Simple & Cross-Platform
- Compatible with Linux and Windows
- Compatible with Docker images based on Linux :)
- Upgrade SixLabors.ImageSharp.* packages
- Drop support of .net standard
- Support .net 8
- Fixed a bug in draw lines feature
- Add BackgroundColor option
- Fixed a typo (
Extentions
renamed to Extensions)
- Upgrade SixLabors.ImageSharp to 2.1.1
- ⚠ WARNING: This version incompatible with the previous version of SixLabors.ImageSharp 1.0.0+
- Update readme file
- Use DrawLinesColor instead of TextColor in creating random lines (#2 by @NK201)
- Add NoiseRateColor/NoiseRate options
- Add MinLineThickness/MaxLineThickness options
- Improve the rendering speed
- Improve the captcha image security
Package | Description |
---|---|
SixLaborsCaptcha.Core | Using for ConsoleApp, WebAPI, WinForms, and etc.. |
SixLaborsCaptcha.Mvc.Core | Using for ASP.NET MVC Core and ASP.NET Web API Core |
Property | Description |
---|---|
FontFamilies | Characters fonts, default is "Arial", "Verdana", "Times New Roman" |
TextColor | Characters colors, default is { Color.Blue, Color.Black, Color.Black, Color.Brown, Color.Gray, Color.Green } |
DrawLinesColor | Line colors, default is { Color.Blue, Color.Black, Color.Black, Color.Brown, Color.Gray, Color.Green } |
Width | Width of image box, default is 180 |
Height | Height of image box, default is 50 |
FontSize | Font size, default is 29 |
FontStyle | Font Style: Regular,Bold,Italic,BoldItalic |
EncoderType | Result file formant: Jpeg,Png |
DrawLines | Draw the random lines, default is 5 |
MaxRotationDegrees | Rotation degrees, default is 5 |
MinLineThickness | Min Line Thickness, default is 0.7f |
MaxLineThickness | Max Line Thickness, default is 2.0f |
NoiseRate | Noise Rate, default is 800 |
NoiseRateColor | Noise colors, default is { Color.Gray } |
BackgroundColor | Background colors, default is { Color.White } |
FontFamilies Option:
Notice: This default fonts working only on Windows, if you want to run it on Linux you have to use the Linux fonts
> dotnet add package SixLaborsCaptcha.Core --version 1.0.0
using SixLaborsCaptcha.Core;
using SixLabors.ImageSharp;
using System.IO;
namespace ConsoleAppSample
{
class Program
{
static void Main(string[] args)
{
var slc = new SixLaborsCaptchaModule(new SixLaborsCaptchaOptions
{
DrawLines = 7,
TextColor = new Color[] { Color.Blue, Color.Black },
});
var key = Extensions.GetUniqueKey(6);
var result = slc.Generate(key);
File.WriteAllBytes($"six-labors-captcha.png", result);
}
}
}
To install SixLaborsCaptcha.Mvc.Core for ASP.NET Core MVC, run the following command in the Terminal:
> dotnet add package SixLaborsCaptcha.Mvc.Core --version 1.0.0
- In the ConfigureServices method of Startup.cs, register the AddSixLabCaptcha generator
using SixLaborsCaptcha.Mvc.Core;
...
public void ConfigureServices(IServiceCollection services)
{
services.AddSixLabCaptcha(x =>
{
x.DrawLines = 4;
});
}
...
- Create an action to generate image
using SixLaborsCaptcha.Core;
...
[HttpGet]
[Route("[action]")]
public FileResult GetCaptchaImage([FromServices] ISixLaborsCaptchaModule sixLaborsCaptcha)
{
string key = Extensions.GetUniqueKey(6);
var imgText = sixLaborsCaptcha.Generate(key);
return File(imgText, "Image/Png");
}
...
- Get the image from action
<div class="text-center">
<h1 class="display-4">Welcome to SixLaborsCaptcha</h1>
<img src='@Url.Action("GetCaptchaImage","Home")?v1' />
<br />
<img src='@Url.Action("GetCaptchaImage","Home")?v2' />
<br />
<img src='@Url.Action("GetCaptchaImage","Home")?v3' />
<br />
<img src='@Url.Action("GetCaptchaImage","Home")?v4' />
</div>
- Download a font (also, you can use the system fonts and don't needs to do this step)
wget -O ~/Downloads/marlboro.zip https://www.1001freefonts.com/d/3761/marlboro.zip
unzip -p ~/Downloads/marlboro.zip Marlboro.ttf > ~/Downloads/Marlboro.ttf
rm ~/Downloads/marlboro.zip
cp ~/Downloads/Marlboro.ttf ~/.fonts/
# other paths
# ~/.fonts/ - for your own fonts.
# /usr/local/share/fonts/ - system-wide, user installed fonts.
# /usr/share/fonts/ - system's font location.
- Config the serivce
services.AddSixLabCaptcha(x => {
x.FontFamilies = new string[] { "Marlboro" };
});