72 lines
1.9 KiB
C#
72 lines
1.9 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using SkiaSharp;
|
|
using System.IO;
|
|
|
|
public class CaptchaService
|
|
{
|
|
public string generatedCaptchaCode;
|
|
public int wrp = 0;
|
|
// 生成验证码图像并返回Base64字符串
|
|
|
|
|
|
public (string captchaImage, string captchaCode) GenerateCaptcha()
|
|
{
|
|
string wp = "123";
|
|
try
|
|
{
|
|
string generatedCaptchaCode = GenerateRandomCode(4); // 生成4位随机字符
|
|
int width = 100, height = 40;
|
|
|
|
using (var bitmap = new SKBitmap(width, height))
|
|
{
|
|
wp = "111";
|
|
using (var canvas = new SKCanvas(bitmap))
|
|
{
|
|
wp = "333";
|
|
canvas.Clear(SKColors.White);
|
|
using (var paint = new SKPaint())
|
|
{
|
|
paint.Color = SKColors.Black;
|
|
paint.TextSize = 20;
|
|
paint.IsAntialias = true;
|
|
canvas.DrawText(generatedCaptchaCode, 10, 30, paint);
|
|
}
|
|
}
|
|
wp = "222";
|
|
using (var image = SKImage.FromBitmap(bitmap))
|
|
using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
|
|
using (var ms = new MemoryStream())
|
|
{
|
|
data.SaveTo(ms);
|
|
string base64Image = Convert.ToBase64String(ms.ToArray());
|
|
return (base64Image, generatedCaptchaCode);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error generating captcha: {ex.Message}");
|
|
return (ex.Message, wp);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 生成随机字符
|
|
private string GenerateRandomCode(int length)
|
|
{
|
|
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345689";
|
|
Random random = new Random();
|
|
return new string(Enumerable.Repeat(chars, length)
|
|
.Select(s => s[random.Next(s.Length)]).ToArray());
|
|
}
|
|
|
|
|
|
|
|
}
|