Python如何制作图片验证码的简单实例
本篇文章主要介绍了Python简单的制作图片验证码实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这里示范的验证码都是简单的,你也可以把字符扭曲
Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块,我们也可以使用它来生成图片验证码
PIL安装
命令安装:
pip install pillow
例子:生成图片,并填充文字
#!/usr/bin/python #-*-coding:utf-8-*- from PIL import Image, ImageDraw, ImageFont, ImageFilter # 实例一个图片对象240 x 60: width = 60 * 4 height = 60 # 图片颜色 clo = (43, 34, 88) # 我觉得是紫蓝色 image = Image.new('RGB', (width, height), clo) # 创建Font对象: # 字体文件可以使用操作系统的,也可以网上下载 font = ImageFont.truetype('./font/Arial.ttf', 36) # 创建Draw对象: draw = ImageDraw.Draw(image) # 输出文字: str1 = "ren ren Python" w = 4 #距离图片左边距离 h = 10 #距离图片上边距离 draw.text((w, h), str1, font=font) # 模糊: image.filter(ImageFilter.BLUR) code_name = 'test_code_img.jpg' save_dir = './{}'.format(code_name) image.save(save_dir, 'jpeg') print("已保存图片: {}".format(save_dir))
(venv) allenwoo@~/renren/code$ python test2.py 已保存图片: ./test_code_img.jpg
图片如下:
文字没有什么色彩,我们也可以加上颜色,只需要在 text 中传人 fill 参数就好
draw.text((w, h), str1, font=font, fill = (78, 64, 65))
随便加的颜色
我们还可以把背景弄成很多个小点,每隔n隔像素填充个其他颜色比如:
#!/usr/bin/python #-*-coding:utf-8-*- from PIL import Image, ImageDraw, ImageFont, ImageFilter # 实例一个图片对象240 x 60: width = 60 * 4 height = 60 # 图片颜色 clo = (43, 34, 88) # 我觉得是紫蓝色 image = Image.new('RGB', (width, height), clo) # 创建Font对象: # 字体文件可以使用操作系统的,也可以网上下载 font = ImageFont.truetype('./font/Arial.ttf', 36) # 创建Draw对象: draw = ImageDraw.Draw(image) # 填充像素: # 宽每隔 20, 高每隔5, 形成坐标x,y # 红色:220,20,60 for x in range(0, width, 20): for y in range(0, height, 5): draw.point((x, y), fill=(220, 20, 60)) # 输出文字: str1 = "we are renren" w = 4 #距离图片左边距离 h = 10 #距离图片上边距离 draw.text((w, h), str1, font=font, fill = (78, 64, 65)) # 模糊: image.filter(ImageFilter.BLUR) code_name = 'test_code_img.jpg' save_dir = './{}'.format(code_name) image.save(save_dir, 'jpeg') print("已保存图片: {}".format(save_dir))
结果图片:
PIL制作验证码
利用以上这些,还有我们之前学习的随机生成器random就可以做个验证码了,
生成验证码代码
#!/usr/bin/python #-*-coding:utf-8-*- from uuid import uuid1 from PIL import Image, ImageDraw, ImageFont, ImageFilter import random def rnd_char(): ''' 随机一个字母或者数字 :return: ''' # 随机一个字母或者数字 i = random.randint(1,3) if i == 1: # 随机个数字的十进制ASCII码 an = random.randint(97, 122) elif i == 2: # 随机个小写字母的十进制ASCII码 an = random.randint(65, 90) else: # 随机个大写字母的十进制ASCII码 an = random.randint(48, 57) # 根据Ascii码转成字符,return回去 return chr(an) # 干扰 def rnd_dis(): ''' 随机一个干扰字 :return: ''' d = ['^','-', '~', '_', '.'] i = random.randint(0, len(d)-1) return d[i] # 两个随机颜色都规定不同的区域,防止干扰字符和验证码字符颜色一样 # 随机颜色1: def rnd_color(): ''' 随机颜色,规定一定范围 :return: ''' return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) # 随机颜色2: def rnd_color2(): ''' 随机颜色,规定一定范围 :return: ''' return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) def create_code(): # 240 x 60: width = 60 * 4 height = 60 image = Image.new('RGB', (width, height), (192, 192, 192)) # 创建Font对象: font = ImageFont.truetype('./font/Arial.ttf', 36) # 创建Draw对象: draw = ImageDraw.Draw(image) # 填充每个像素: for x in range(0, width, 20): for y in range(0, height, 10): draw.point((x, y), fill=rnd_color()) # 填充字符 _str = "" # 填入4个随机的数字或字母作为验证码 for t in range(4): c = rnd_char() _str = "{}{}".format(_str, c) # 随机距离图片上边高度,但至少距离30像素 h = random.randint(1, height-30) # 宽度的化,每个字符占图片宽度1/4,在加上10个像素空隙 w = width/4 * t + 10 draw.text((w, h), c, font=font, fill=rnd_color2()) # 实际项目中,会将验证码 保存在数据库,并加上时间字段 print("保存验证码 {} 到数据库".format(_str)) # 给图片加上字符干扰,密集度由 w, h控制 for j in range(0, width, 30): dis = rnd_dis() w = t * 15 + j # 随机距离图片上边高度,但至少距离30像素 h = random.randint(1, height - 30) draw.text((w, h), dis, font=font, fill=rndColor()) # 模糊: image.filter(ImageFilter.BLUR) # uuid1 生成唯一的字符串作为验证码图片名称 code_name = '{}.jpg'.format(uuid1()) save_dir = './{}'.format(code_name) image.save(save_dir, 'jpeg') print("已保存图片: {}".format(save_dir)) # 当直接运行文件的是和,运行下面代码 if name == "main": create_code()
(venv) allenwoo@~/renren/code$ python test.py 保存验证码 ef3k 到数据库 已保存图片: ./c86e03c0-1c23-11e7-999d-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 I37X 到数据库 已保存图片: ./cb8aed02-1c23-11e7-9b18-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 vVL1 到数据库 已保存图片: ./cc120da8-1c23-11e7-b762-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 K6w3 到数据库 已保存图片: ./cc891e05-1c23-11e7-b7ec-f45c89c09e61.jpg
你觉得难不难呢?最后这个生成验证码代码中有些逻辑问题要理解下
以上是Python如何制作图片验证码的简单实例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

在 Sublime Text 中运行 Python 代码,需先安装 Python 插件,再创建 .py 文件并编写代码,最后按 Ctrl B 运行代码,输出会在控制台中显示。

在 Visual Studio Code(VSCode)中编写代码简单易行,只需安装 VSCode、创建项目、选择语言、创建文件、编写代码、保存并运行即可。VSCode 的优点包括跨平台、免费开源、强大功能、扩展丰富,以及轻量快速。

VS Code 可用于编写 Python,并提供许多功能,使其成为开发 Python 应用程序的理想工具。它允许用户:安装 Python 扩展,以获得代码补全、语法高亮和调试等功能。使用调试器逐步跟踪代码,查找和修复错误。集成 Git,进行版本控制。使用代码格式化工具,保持代码一致性。使用 Linting 工具,提前发现潜在问题。

在 Notepad 中运行 Python 代码需要安装 Python 可执行文件和 NppExec 插件。安装 Python 并为其添加 PATH 后,在 NppExec 插件中配置命令为“python”、参数为“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通过快捷键“F6”运行 Python 代码。
