用python做一个图片验证码
看一下做出来的验证码长啥样
验证码分析
1. 有很多点
2. 有很多线条
3. 有字母,有数字
需要用到的模块:
1. random
2. Pillow (python3中使用pillow)
安装pillow : pip install pillow
pillow的用法:
创建一张图片:
from PIL import Image, ImageDraw, ImageFont, ImageFilterimg = Image.new("RGB", (150,50), (255,255,255))
使用Image.net()方法创建一张图片,“RGB”是指RGB格式的图片, (150,50)指图片的长和高, (255,255,255)是RGB对应的值就是颜色。
在图片上随机画点:
draw.point(( random.randint(0,150), random.randint(0,150)), #坐标fill = (0,0,0) #颜色 )
画点,需要给出点的坐标,就是在什么地方画,坐标怎么算? 图片左上角坐标为(0, 0)
在图片上随机画线条:
draw.line([(random.randint(0,150), random.randint(0,150), #起点(random.randint(0,150), random.randint(0,150), #终点 ], fill = (0,0,0) #颜色 )
画线条,需要两个坐标,起点和终点
在图片上写helloworld:
font = ImageFont.truetype("simsun.ttc", 24) #字体,两个参数,字体,字号 draw.text(5,5), "helloworld", font=font, fill="green") #文字左上角位置,内容,字体, 颜色
text(5,5)是第一个字左上角的坐标
random的用法
这里主要使用randint和sample两个方法
取随机数
import randomrandom.randint(1, 9) #从1-9中随机取一个数
从列表中随机取数
>>> li = ['a','b','c',1,3,5,6] >>> random.sample(li,5) [6, 3, 'b', 'a', 1]
从列表li中随机取出5个数
下面是完整代码
from PIL import Image, ImageDraw, ImageFont, ImageFilter import randomclass Picture(object):def __init__(self, text_str, size, background):'''text_str: 验证码显示的字符组成的字符串size: 图片大小background: 背景颜色'''self.text_list = list(text_str)self.size = sizeself.background = backgrounddef create_pic(self):'''创建一张图片'''self.width, self.height = self.sizeself.img = Image.new("RGB", self.size, self.background)#实例化画笔self.draw = ImageDraw.Draw(self.img)def create_point(self, num, color):'''num: 画点的数量color: 点的颜色功能:画点'''for i in range(num):self.draw.point((random.randint(0, self.width), random.randint(0,self.height)),fill = color)def create_line(self, num, color):'''num: 线条的数量color: 线条的颜色功能:画线条'''for i in range(num):self.draw.line([(random.randint(0, self.width), random.randint(0, self.height)),(random.randint(0, self.width), random.randint(0, self.height))],fill = color)def create_text(self, font_type, font_size, font_color, font_num, start_xy):'''font_type: 字体font_size: 文字大小font_color: 文字颜色font_num: 文字数量start_xy: 第一个字左上角坐标,元组类型,如 (5,5)功能: 画文字'''font = ImageFont.truetype(font_type, font_size)self.draw.text(start_xy, " ".join(random.sample(self.text_list, font_num)), font=font, fill=font_color)def opera(self):'''功能:给画出来的线条,文字,扭曲一下,缩放一下,位移一下,滤镜一下。就是让它看起来有点歪,有点扭。'''params = [1 - float(random.randint(1,2)) / 100,0,0,0,1 - float(random.randint(1,10)) / 100,float(random.randint(1,2)) / 500,0.001,float(random.randint(1,2)) / 500]self.img = self.img.transform(self.size, Image.PERSPECTIVE, params)self.img = self.img.filter(ImageFilter.EDGE_ENHANCE_MORE)if __name__ == "__main__":strings = "abcdefghjkmnpqrstwxyz23456789ABCDEFGHJKLMNPQRSTWXYZ"size = (150,50)background = 'white'pic = Picture(strings, size, background)pic.create_pic()pic.create_point(500, (220,220,220))pic.create_line(30, (220,220,220))pic.create_text("simsun.ttc", 24, (0,0,205), 5, (7,7))pic.opera()pic.img.show()
转载于:https://www.cnblogs.com/huangxm/p/6227001.html
用python做一个图片验证码相关推荐
- 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。
最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了. 编码 为了快速实现我们的目标,我们就不自己写图片 ...
- 卡通化图片python实现代码_媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。...
最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了. 编码 为了快速实现我们的目标,我们就不 ...
- python画哆啦a梦图片_80行代码!用Python做一个哆来A梦分身
原标题:80行代码!用Python做一个哆来A梦分身 对于分身术,大家想必都或多或少的从<火影忍者>的动漫上看到过,炫酷的影分身场面,每每看到都觉得非常过瘾. 今天, 小编其实是蓝胖子的铁 ...
- 使用python做一个pdf转图片的可执行exe程序
使用python做一个pdf转图片的可执行exe 1.安装环境 python3 模块:PymuPDF,pyinstaller import fitz import os import tkinterd ...
- 用Python做一个“以图搜番“的应用程序,再也不用愁动漫图片的出处了!
文章目录 前言 PyQt5界面设计 使用Qt Designer绘制界面 视频部件插入小技巧 解码器下载 功能实现 trace.moe API介绍与视频 使用Nuitka打包成exe文件 前言 喜欢看动 ...
- python可以做动漫吗_用Python做一个以图搜番的应用程序,再也不用愁动漫图片的出处了!...
前言 喜欢看动漫的朋友们大概都能体会到一个难受的事情,就是在论坛或者群聊里面看到一张动漫截图,很想知道它的出处,但百度搜了一圈却也没有一个可靠结果,就很郁闷.今天就来带大家用Python做一个简单的& ...
- python画圣诞老人图片_来得瑟一下!用Python做一个缩放自如的圣诞老人
原标题:来得瑟一下!用Python做一个缩放自如的圣诞老人 圣诞节又要到了,虽说我们中国人不提倡过西方的节日, 但是商家们还是很喜欢的,估计有对象的男孩纸女孩纸们也很喜欢吧. 今天的主题是为大家展示如 ...
- python写520_用Python做一个520表白神器,值得收藏
本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用. 先来看一下具体的效果. 运行程序. 用Python做一个520表白神器,值得收藏 点击「 ...
- python实战扫码下载_实例:用 Python 做一个扫码工具
原标题:实例:用 Python 做一个扫码工具 来自公众号: 新建文件夹X 链接:https://blog.csdn.net/ZackSock/article/details/108610957Pyt ...
最新文章
- Android版俄罗斯方块的实现
- 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载)
- 从Github开源项目《云阅》所学到的知识
- Java 中的位移运算符
- mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?
- 把list清空和赋值null对内存释放的区别
- [Swift实际操作]七、常见概念-(12)使用DispatchGroup(调度组)管理线程数组
- 在Windows上安装Python
- windows 安装msi 出现报错 2503 无权限 使用cmd模式安装
- log4j 日志书写格式_Log4J日志配置详解
- listview分页加载的实现
- Web网页——留言板功能
- 《犯罪心理学》读书笔记(part2)--犯罪心理学发展史
- matlab改进平方根算法,改进平方根请教
- 最大网络流的多种解法(洛谷P3376 网络最大流 为例)
- 微信怎么录屏聊天记录?这两个方法值得收藏!
- WPF 使用Microsoft.Ink 做的墨迹输入法
- i7 9750h和i511400h差距
- 澳拳击袋鼠体型巨大 身高超2米体重近200斤
- 情报板/路政/枪机/卡口/监控类摄像机