python生成验证码,文字转换为图片

python生成验证码,文字转换为图片
最新回答
心碎比心死更痛

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) # 浅灰背景 )关键点说明
  1. 中文支持:

    必须使用支持中文的字体(如Microsoft YaHei、SimHei、SimSun等)

    代码中添加了字体加载的异常处理,当指定字体不可用时自动回退到默认字体

  2. 环境兼容性:

    原代码使用Python 2.7,但建议使用Python 3.x(代码已做兼容)

    需安装pygame库:pip install pygame

  3. 功能增强:

    自动创建输出目录(os.makedirs)

    可自定义文字颜色和背景色

    添加了详细的参数注释

  4. 验证码特性扩展建议:

    # 在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
常见问题解决方案
  1. 中文显示乱码:

    确认系统安装了指定字体

    Linux系统可能需要安装中文字体包:sudo apt install fonts-wqy-zenhei

  2. 图片保存失败:

    检查输出目录权限

    使用绝对路径避免路径问题

  3. 性能优化:

    对于批量生成,建议复用pygame初始化

    可使用pygame.Surface直接操作像素数据

完整验证码生成示例(含干扰元素)import randomdef generate_captcha(): pygame.init() # 生成随机验证码 chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" text = "".join(random.choice(chars) for _ in range(6)) # 创建画布 width, height = 200, 80 surface = pygame.Surface((width, height)) surface.fill((255,)*3) # 白色背景 # 渲染文字(随机位置) font = pygame.font.SysFont('arial', 36) for i, char in enumerate(text): text_render = font.render(char, True, (random.randint(0,150),)*3) surface.blit(text_render, (10 + i*30 + random.randint(-5,5), 20 + random.randint(-5,5))) # 添加干扰 for _ in range(20): pygame.draw.circle(surface, (random.randint(100,255),)*3, (random.randint(0,width), random.randint(0,height)), 1) # 保存 pygame.image.save(surface, "captcha.png") return text

该方案在Windows/Linux系统下均可运行,生成的图片可直接用于网页验证码或手机号脱敏显示场景。如需更复杂的验证码(如扭曲文字、粘连字符等),建议使用专门的验证码库如captcha。