backend/Magic.Core/Captcha/ClickWord/ClickWordCaptcha.cs

(开头部分) 11KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Furion;
using Furion.DependencyInjection;
using Furion.JsonSerialization;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using Yitter.IdGenerator;

namespace Magic.Core;

/// <summary>
/// 点选验证码
/// </summary>
public class ClickWordCaptcha : IClickWordCaptcha, ITransient
{
    private readonly IMemoryCache _memoryCache;

    public ClickWordCaptcha(IMemoryCache memoryCache)
    {
        _memoryCache = memoryCache;
    }

    /// <summary>
    /// 生成验证码图片
    /// </summary>
    /// <param name="code"></param>
    /// <param name="width"></param>
    /// <param name="height"></param>
    /// <returns></returns>
    public ClickWordCaptchaResult CreateCaptchaImage(string code, int width, int height)
    {
        var rtnResult = new ClickWordCaptchaResult();

        // 变化点: 3个字
        int rightCodeLength = 3;

        Bitmap bitmap = null;
        Graphics g = null;
        MemoryStream ms = null;
        Random random = new();

        Color[] colorArray = { Color.Black, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

        string bgImagesDir = Path.Combine(App.WebHostEnvironment.WebRootPath, "Captcha/Image");
        string[] bgImagesFiles = Directory.GetFiles(bgImagesDir);

        // 字体来自:https://www.zcool.com.cn/special/zcoolfonts/
        string fontsDir = Path.Combine(App.WebHostEnvironment.WebRootPath, "Captcha/Font");
        string[] fontFiles = new DirectoryInfo(fontsDir)?.GetFiles()
            ?.Where(m => m.Extension.ToLower() == ".ttf")
            ?.Select(m => m.FullName).ToArray();

        int imgIndex = random.Next(bgImagesFiles.Length);
        string randomImgFile = bgImagesFiles[imgIndex];
        var imageStream = Image.FromFile(randomImgFile);

后面还有 163 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。