吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1511|回复: 28
收起左侧

[Python 转载] 生成验证码图片

[复制链接]
lookfeiji 发表于 2023-11-15 14:10
看到别人训练模型验证码,我突然对于验证码的生成有点好奇了,于是搜索了一下找到一个源码。效果还不错,但是他生成的是字母与数字,于是我稍加修改将他改成了汉字。源码核心是取的Unicode码中的0x4E00至0x9FFF中文取值范围,当然这个取值范围已经包含了中文大部分的汉字了。
这个源码只是随机乱序,以及背景随机色,有兴趣的可以自行修改
其实仔细考虑一下感觉这里还有很多可以优化,可以整个跟随图片大小与排列方式的算法出来,以及多位汉字排序验证


[Python] 纯文本查看 复制代码
import random
from PIL import Image, ImageDraw, ImageFont


def create_CAPTCHA_content():
    """
    生成验证码内容的函数
    :return:
    """
    CAPTCHA_text = ""
    for i in range(1, 5):  # 4位验证码
        CAPTCHA_text += chr(random.randint(0x4E00, 0x9FFF))  # 随机取中文汉字的Unicode码chr转为汉字

    return CAPTCHA_text


# 创建新图像
image = Image.new("RGB", (300, 100), (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
draw = ImageDraw.Draw(image)  # 创建画布
# 加载字体 是Windows自带的
font = ImageFont.truetype(r'C:\Windows\Fonts\simhei.ttf', size=30)

test = create_CAPTCHA_content()

for i in test:  # 随机验证码
    # 为每个验证码字符设置不同的RGB颜色
    R = str(random.randint(0, 255))
    G = str(random.randint(0, 255))
    B = str(random.randint(0, 255))

    draw.text((random.randint(50, 250), random.randint(15, 80)),  # 摆放位置
              text=i,
              font=font,
              fill="rgb(" + R + "," + G + "," + B + ")",
              direction=None)


# 添加干扰线条
for i in range(1, random.randint(7, 15)):  # 线条数量在7-15间
    x, y = random.randint(0, 300), random.randint(0, 100)  # 线条起点
    x2, y2 = random.randint(0, 300), random.randint(0, 100)  # 线条终点

    # 随机颜色
    R = str(random.randint(0, 255))
    G = str(random.randint(0, 255))
    B = str(random.randint(0, 255))
    # 绘制线条 宽度为2
    draw.line((x, y, x2, y2), fill="rgb(" + R + "," + G + "," + B + ")", width=2)

print(test)
image.show()
image.save("CAPTCHA.png")


这是随机生成的图片

这是随机生成的图片
1700028704673.png

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
2070468250 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wodes + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| lookfeiji 发表于 2023-11-16 15:37
wodes 发表于 2023-11-16 13:44
OK,我自己研究研究。谢啦

我大概跟你说下思路你就知道了,先随机从Unicode码中的0x4E00到0x9FFF这个范围取值,将取出的转码为utf-8就是汉字了,再将四个汉字以字符串的形式加起来就是一个汉字字符串了,再新建一个画布将这个组字符串传递给画布就基本差不多了啊,一张带有汉字的图片不就出现了。其他的你要改变画布的背景色啊,字符串的字体大小与颜色啊,以及一些干扰元素什么的自己加就好了啊。
 楼主| lookfeiji 发表于 2023-11-15 23:47
本帖最后由 lookfeiji 于 2023-11-16 10:00 编辑
lookfeiji 发表于 2023-11-15 15:26
不是批量生成的,生成一个你要的话晚上有时间给你搞一个

百度网盘链接:https://pan.baidu.com/s/1Lg_prG5TnJglgpG_lOsbmw?pwd=52pj

提取码:52pj
用PyInstaller打包的360可能会报毒,文件名是验证码里的汉字
68FQ)IHL]GJ7S9%%Q8)$HCX.png
 楼主| lookfeiji 发表于 2023-11-15 15:26

不是批量生成的,生成一个你要的话晚上有时间给你搞一个
zhangxc1989 发表于 2023-11-15 15:44
楼主牛逼。。但这个验证如果不是按顺序点击,而是需要输入的话,我感觉很多人不一定认识这些字,哈哈哈
wuAiPJ52 发表于 2023-11-15 16:45
思路牛逼,小建议:建立长度为N的常用字库表,然后取随机数%N
铅笔达人 发表于 2023-11-15 17:16
厉害,顶一下
nmn 发表于 2023-11-15 17:22
之前会做数字验证码,这又学习到了文字验证码的方法,多谢楼主!
wodes 发表于 2023-11-15 17:23
lookfeiji 发表于 2023-11-15 15:26
不是批量生成的,生成一个你要的话晚上有时间给你搞一个

这个是用Python搞的嘛?能用JAVAweb搞一个吗?
ycz0030 发表于 2023-11-15 17:33
多谢分享,学习了
wangguang 发表于 2023-11-15 18:02
zhangxc1989 发表于 2023-11-15 15:44
楼主牛逼。。但这个验证如果不是按顺序点击,而是需要输入的话,我感觉很多人不一定认识这些字,哈哈哈

人不一定认识,但是人工智能绝对认识。如果人都不认识的话他这个验证码就是个绊脚的,防人不防,严重影响客户体验感
130366 发表于 2023-11-15 18:10
不认识这些字,换成常用字就好了。感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 21:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表