全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python简单的制作图片验证码实例

这里示范的验证码都是简单的,你也可以把字符扭曲


Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块,我们也可以使用它来生成图片验证码

PIL安装

命令安装:

pip install pillow

下载源码安装:

复制地址 :https://github.com/python-pillow/Pillow

PIL使用

例子:生成图片,并填充文字

#!/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图片验证码  # Python  # 验证码  # python识别图片验证码  # python 图片验证码代码  # python 图片验证码代码分享  # python生成验证码图片代码分享  # python使用pil生成图片验证码的方法  # Python使用PIL库实现验证码图片的方法  # python图片验证码生成代码  # python3 pillow生成简单验证码图片的示例  # 在Python web中实现验证码图片代码分享  # 利用Python破解验证码实例详解  # Python实现破解12306图片验证码的方法分析  # 可以使用  # 每隔  # 我觉得  # 第三方  # 的是  # 都是  # 操作系统  # 还可以  # 就好  # 网上  # 只需  # 要在  # 没有什么  # 但至少  # 做个  # 你觉得  # 会将  # 你也可以  # 它来 


相关文章: 武清网站制作公司,天津武清个人营业执照注销查询系统网站?  制作宣传网站的软件,小红书可以宣传网站吗?  如何选择CMS系统实现快速建站与SEO优化?  如何快速搭建高效服务器建站系统?  免费网站制作appp,免费制作app哪个平台好?  如何快速选择适合个人网站的云服务器配置?  详解jQuery停止动画——stop()方法的使用  建站之星如何实现网站加密操作?  家具网站制作软件,家具厂怎么跑业务?  C#怎么创建控制台应用 C# Console App项目创建方法  简历在线制作网站免费版,如何创建个人简历?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何快速搭建安全的FTP站点?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  建站主机如何选?性能与价格怎样平衡?  网站按钮制作软件,如何实现网页中按钮的自动点击?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  韩国服务器如何优化跨境访问实现高效连接?  网站图片在线制作软件,怎么在图片上做链接?  如何在橙子建站中快速调整背景颜色?  如何用狗爹虚拟主机快速搭建网站?  学校建站服务器如何选型才能满足性能需求?  如何彻底卸载建站之星软件?  如何使用Golang安装API文档生成工具_快速生成接口文档  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  教程网站设计制作软件,怎么创建自己的一个网站?  如何自定义建站之星网站的导航菜单样式?  c# 在ASP.NET Core中管理和取消后台任务  建站VPS选购需注意哪些关键参数?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  定制建站流程步骤详解:一站式方案设计与开发指南  制作农业网站的软件,比较好的农业网站推荐一下?  如何将凡科建站内容保存为本地文件?  建站DNS解析失败?如何正确配置域名服务器?  一键网站制作软件,义乌购一件代发流程?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  微信推文制作网站有哪些,怎么做微信推文,急?  建站之星如何实现五合一智能建站与营销推广?  如何选择PHP开源工具快速搭建网站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  如何撰写建站申请书?关键要点有哪些?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何快速生成可下载的建站源码工具?  建站OpenVZ教程与优化策略:配置指南与性能提升  如何在沈阳梯子盘古建站优化SEO排名与功能模块? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。