目录
1.认识Python
2.环境与工具
2.1 python环境
2.2 Visual Studio Code编译
3.生成验证码
3.1 代码构思
3.2 代码实例
3.3 运行如果
4.总结
1.认识Python
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。
2.环境与工具
2.1 python环境
在Windows上使用命令行窗口查看所安装的python版本
python --version
2.2 Visual Studio Code编译
Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。
3.生成验证码
3.1 代码构思
通过使用pillow库,用该库生成一个image对象,再基于这个对象生成一个画笔,用画笔魔方人为输入在图形上操作。
3.2 代码实例
from PIL import Image, ImageDraw, ImageFont
import random
# 获取一个随机汉字
def get_random_chinese_char():
high_byte = random.randint(0xb0, 0xf7)
low_byte = random.randint(0xa1, 0xfe)
two_bytes = (high_byte << 8) | low_byte
str_hex = "%x" % two_bytes
return bytes.fromhex(str_hex).decode('gb2312')
# 取出随机字符
def get_random_char():
string_list = []
string_list.append(chr(random.randint(65, 90))) # 大写字母
string_list.append(chr(random.randint(97, 122))) # 小写字母
string_list.append(str(random.randint(0, 9))) # 数字
string_list.append(get_random_chinese_char()) # 汉字
return random.choice(string_list)
# 生成随机颜色
def random_color_line():
R = random.randint(18, 128)
G = random.randint(18, 128)
B = random.randint(18, 128)
return (R, G, B)
# 生成随机颜色
def random_color_char():
R = random.randint(68, 255)
G = random.randint(68, 255)
B = random.randint(68, 255)
return (R, G, B)
# 生成在图形上的随机坐标值
def get_rand_point(image_obj):
width, height = image_obj.size
return (random.randint(0, width), random.randint(0, height))
# 生成干扰线
def draw_line(image_obj, num):
draw = ImageDraw.Draw(image_obj)
for i in range(num):
draw.line([get_rand_point(image_obj), get_rand_point(image_obj)], fill=random_color_line())
del draw
if __name__ == '__main__':
# 创建一个新的图像对象
Image_captcha = Image.new('RGB', (200, 100), (232, 232, 232))
# 画干扰线
draw_line(Image_captcha, 8)
# 加载字体,确保字体文件在同一目录下
try:
font_china = ImageFont.truetype('cangekuheiziti.ttf', 50) #字体文件
except IOError:
print("没有发现字体文件,请确保字体文件的路径正确。")
exit()
# 创建画笔对象
draw_pen = ImageDraw.Draw(Image_captcha)
# 画验证码字符
for i in range(5):
draw_pen.text((38 * i + 10, 25), get_random_char(), random_color_char(), font=font_china)
del draw_pen # 显式删除画笔对象
# 显示图像
Image_captcha.show()
# 保存图像,确保保存路径存在
try:
Image_captcha.save('captcha.png')
except IOError:
print("Failed to save image. ")
3.3 运行如果
4.总结
该程序展示了普通的文字验证码生成方式。
程序中用了字体文件(.ttf格式),可以自行在网上下载。