72 lines
1.9 KiB
C#
Raw Permalink Normal View History

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