看一下做出来的验证码长啥样

验证码分析

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做一个图片验证码相关推荐

  1. 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。

    最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了. 编码 为了快速实现我们的目标,我们就不自己写图片 ...

  2. 卡通化图片python实现代码_媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。...

    ​    最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了. 编码 为了快速实现我们的目标,我们就不 ...

  3. python画哆啦a梦图片_80行代码!用Python做一个哆来A梦分身

    原标题:80行代码!用Python做一个哆来A梦分身 对于分身术,大家想必都或多或少的从<火影忍者>的动漫上看到过,炫酷的影分身场面,每每看到都觉得非常过瘾. 今天, 小编其实是蓝胖子的铁 ...

  4. 使用python做一个pdf转图片的可执行exe程序

    使用python做一个pdf转图片的可执行exe 1.安装环境 python3 模块:PymuPDF,pyinstaller import fitz import os import tkinterd ...

  5. 用Python做一个“以图搜番“的应用程序,再也不用愁动漫图片的出处了!

    文章目录 前言 PyQt5界面设计 使用Qt Designer绘制界面 视频部件插入小技巧 解码器下载 功能实现 trace.moe API介绍与视频 使用Nuitka打包成exe文件 前言 喜欢看动 ...

  6. python可以做动漫吗_用Python做一个以图搜番的应用程序,再也不用愁动漫图片的出处了!...

    前言 喜欢看动漫的朋友们大概都能体会到一个难受的事情,就是在论坛或者群聊里面看到一张动漫截图,很想知道它的出处,但百度搜了一圈却也没有一个可靠结果,就很郁闷.今天就来带大家用Python做一个简单的& ...

  7. python画圣诞老人图片_来得瑟一下!用Python做一个缩放自如的圣诞老人

    原标题:来得瑟一下!用Python做一个缩放自如的圣诞老人 圣诞节又要到了,虽说我们中国人不提倡过西方的节日, 但是商家们还是很喜欢的,估计有对象的男孩纸女孩纸们也很喜欢吧. 今天的主题是为大家展示如 ...

  8. python写520_用Python做一个520表白神器,值得收藏

    本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用. 先来看一下具体的效果. 运行程序. 用Python做一个520表白神器,值得收藏 点击「 ...

  9. python实战扫码下载_实例:用 Python 做一个扫码工具

    原标题:实例:用 Python 做一个扫码工具 来自公众号: 新建文件夹X 链接:https://blog.csdn.net/ZackSock/article/details/108610957Pyt ...

最新文章

  1. Android版俄罗斯方块的实现
  2. 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载)
  3. 从Github开源项目《云阅》所学到的知识
  4. Java 中的位移运算符
  5. mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  6. 把list清空和赋值null对内存释放的区别
  7. [Swift实际操作]七、常见概念-(12)使用DispatchGroup(调度组)管理线程数组
  8. 在Windows上安装Python
  9. windows 安装msi 出现报错 2503 无权限 使用cmd模式安装
  10. log4j 日志书写格式_Log4J日志配置详解
  11. listview分页加载的实现
  12. Web网页——留言板功能
  13. 《犯罪心理学》读书笔记(part2)--犯罪心理学发展史
  14. matlab改进平方根算法,改进平方根请教
  15. 最大网络流的多种解法(洛谷P3376 网络最大流 为例)
  16. 微信怎么录屏聊天记录?这两个方法值得收藏!
  17. WPF 使用Microsoft.Ink 做的墨迹输入法
  18. i7 9750h和i511400h差距
  19. 澳拳击袋鼠体型巨大 身高超2米体重近200斤
  20. 情报板/路政/枪机/卡口/监控类摄像机

热门文章

  1. 软件测试质量过程检测文档_如何编写实际上有效的质量检查文档
  2. 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解
  3. 中级前端笔试_在短短8个月内如何获得中级前端开发人员的角色
  4. Spring Boot项目快速搭建
  5. Mac MySQL配置环境变量的两种方法
  6. IDEA新建springboot项目发生错误
  7. 1012 The Best Rank
  8. java培训有哪些收费标准
  9. 什么样的人适合学习UI?
  10. JAVA增删改查XML文件