2026-06-29 00:12:12
以下是使用Python生成验证码(文字转图片)的详细实现方案,基于pygame库并针对中文优化:
核心代码实现#coding: UTF-8import pygamefrom pygame.locals import *def generate_text_image(text, output_path, font_name='Microsoft YaHei', font_size=64, text_color=(65, 83, 130), bg_color=(255, 255, 255)): """ 生成文字图片 :param text: 要渲染的文字(支持中文) :param output_path: 图片保存路径 :param font_name: 字体名称(需支持中文) :param font_size: 字号 :param text_color: 文字颜色(RGB) :param bg_color: 背景颜色(RGB) """ pygame.init() # 创建字体对象(添加异常处理) try: font = pygame.font.SysFont(font_name, font_size) except: # 如果系统字体不可用,使用默认字体 font = pygame.font.Font(None, font_size) # 渲染文字(添加抗锯齿) text_surface = font.render(text, True, text_color, bg_color) # 保存图片(自动创建目录) os.makedirs(os.path.dirname(output_path), exist_ok=True) pygame.image.save(text_surface, output_path) print(f"图片已保存至: {output_path}")# 示例调用if __name__ == '__main__': # 中文验证码示例 generate_text_image( text=u"验证码123", output_path="output/captcha.jpg", font_name='simhei', # 黑体(Windows系统) font_size=48, text_color=(0, 0, 255), # 蓝色文字 bg_color=(240, 240, 240) # 浅灰背景 )关键点说明中文支持:
必须使用支持中文的字体(如Microsoft YaHei、SimHei、SimSun等)
代码中添加了字体加载的异常处理,当指定字体不可用时自动回退到默认字体
环境兼容性:
原代码使用Python 2.7,但建议使用Python 3.x(代码已做兼容)
需安装pygame库:pip install pygame
功能增强:
自动创建输出目录(os.makedirs)
可自定义文字颜色和背景色
添加了详细的参数注释
验证码特性扩展建议:
# 在render后添加干扰元素(示例)def add_noise(surface): # 添加干扰线 for _ in range(5): pygame.draw.line(surface, (random.randint(0,255),)*3, (random.randint(0,surface.get_width()),0), (random.randint(0,surface.get_width()),surface.get_height())) return surface中文显示乱码:
确认系统安装了指定字体
Linux系统可能需要安装中文字体包:sudo apt install fonts-wqy-zenhei
图片保存失败:
检查输出目录权限
使用绝对路径避免路径问题
性能优化:
对于批量生成,建议复用pygame初始化
可使用pygame.Surface直接操作像素数据
该方案在Windows/Linux系统下均可运行,生成的图片可直接用于网页验证码或手机号脱敏显示场景。如需更复杂的验证码(如扭曲文字、粘连字符等),建议使用专门的验证码库如captcha。