模拟动态产生验证码图片

模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 Python 提供的 Pillow 模块。

Pillow

PIL:Python Image Library,Python 的图像处理标准库,功能强大。

PIL 是第三方库,使用之前需要先进行安装。具体的命令如下:(如果安装了 Anaconda,这一步可以跳过)

$ pip install pillow

下面先简单介绍 Pillow 的功能。

操作图像

缩放图像,是 Pillow 的一个功能,示例如下:

from PIL import Image

# 打开图片,注意路径

img = Image.open('pitbull.jpeg')

# 获得图片尺寸

weight, height = img.size

print('原图片尺寸:{}x{}'.format(weight, height))

# 进行缩放,缩放 50%

img.thumbnail((weight//2, height//2))

print('调整后的图片尺寸:{}x{}'.format(weight//2, height//2))

# 将缩放后的图片保存

img.save('thumbnail.jpg', 'jpeg')

Pillow 还有其他的功能,例如旋转,剪切,滤镜,输出文字,调色板等。

ImageFilter

下面尝试模糊图片处理:

from PIL import Image,ImageFilter

# 打开图片文件,注意路径

img = Image.open('pitbull.jpeg')

# 应用模糊滤镜

img2 = img.filter(ImageFilter.BLUR)

img2.save('blur.jpg', 'jpeg')

ImageFilter 是 Python 提供的图像滤波,而 ImageFilter.BLUR 是模糊滤波。

上面代码具体的效果如下:

pitbull1.jpg

blur.jpg

ImageDraw

同时 Pillow 的 ImageDraw 提供了一些列绘图方法,使我们可以直接绘图。下面使用这种方法来尝试生成字母验证码图片:

# -*- coding: utf-8 -*-

'''

@File: generate_random_code.py

@Time: 2020/01/31 20:32:10

@Author: 大梦三千秋

@Contact: yiluolion@126.com

'''

# Put the import lib here

from random import randint, choice

from PIL import Image, ImageDraw, ImageFont, ImageFilter

def rnd_chr(chr_set):

'''获取随机字符

Args:

chr_set: 拟定生成的字符集

Returns:

返回随机字符

'''

return choice(chr_set)

def rnd_bg_color():

'''获取随机像素值,填充背景

Returns:

返回随机像素值,返回元组类型

'''

return (randint(97, 255), randint(97, 255), randint(97, 255))

def rnd_chr_color():

'''获取随机像素,填充输出字符

Returns:

返回随机像素值,返回元组类型

'''

# 与画板填充色进行一定的错开,防止完全覆盖

return (randint(32, 96), randint(32, 96), randint(32, 96))

def main():

# 生成字符集

chr_set = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

for i in range(65, 91):

chr_set.append(chr(i))

for j in range(97, 123):

chr_set.append(chr(j))

# print(chr_set)

# 定义画板规格 250 x 50

width = 60 * 5

height = 60

# 创建 Image 对象,白底画板

image = Image.new('RGB', (width, height), (255, 255, 255))

# 创建 Draw 对象

draw = ImageDraw.Draw(image)

# 创建 Font 对象

font = ImageFont.truetype('./consola.ttf', 36)

# 填充画板

for x in range(width):

for y in range(height):

draw.point((x, y), fill=rnd_bg_color())

# 填充文字

for n in range(5):

draw.text((60 * n + 25, 12), rnd_chr(chr_set), fill=rnd_chr_color(), font=font)

# 对图像内容进行模糊后存储

image = image.filter(ImageFilter.BLUR)

image.save('./random_code.jpg', 'jpeg')

if __name__ == "__main__":

main()

代码具体实现过程是,先用随机颜色填充背景,再生成字母,最后对图片进行模糊处理。具体实现效果如下:

random_code.jpg

代码在运行的过程中,可能会出现下面的错误:

IOError: cannot open resourse

出现这个问题的原因是 PIL 无法定位到字体文件的位置,可以考虑直接提供绝对位置。

font = ImageFont.truetype('/absolute/path/font.ttf', 36)

本篇文章提及的 Pillow 仅是简单的部分功能,如果要继续了解 PIL 的强大功能,可以参考 Pillow 官方文档:

以上为本篇的主要内容。

欢迎关注微信公众号《书所集录》

python绘制动态模拟图-Python 模拟动态产生验证码图片相关推荐

  1. python绘制三维曲面图-python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  2. python绘制三维曲面图-Python中使用Matplotlib绘制3D图形示例

    原标题:Python中使用Matplotlib绘制3D图形示例 3D图形能给我们对数据带来更加深入地理解.python的matplotlib库就包含了丰富的3D绘图工具.3D图形在数据分析.数据建模. ...

  3. python绘制3维图-Python 画出来六维图

    来自维基百科 我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面. 不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 p ...

  4. python绘制3维图-Python 绘制 3 维以上的高维图

    实用技巧. 我们的大脑通常最多能感知三维空间,超过三维就很难想象了.尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面.不过,我们仍然可以绘制出多维空间,今天就来用 Python 的 plo ...

  5. python绘制3维图-python——绘制二元高斯分布的三维图像,

    在对数据进行可视化的过程中,可能经常需要对数据进行三维绘图,在python中进行三维绘图其实是比较简单的,下面我们将给出一个二元高斯分布的三维图像案例,并且给出相关函数的参数. 通常,我们绘制三维图像 ...

  6. python画聚类图_python绘制的聚类图Python的局部变量和全局变量使用解惑

    局部变量:在函数中定义的变量,作用域是当前函数,只对当前函数起作用. 全局变量:在代码开头定义的变量,作用域是整段代码,对整段代码起作用. 先看下面的实例, 最后给结论.name = 'PythonT ...

  7. python绘制梅尔谱图_3D星空图V2版——添加背景图片和音乐

    阿黎逸阳   精选Python.SQL.R.MATLAB等相关知识,让你的学习和工作更出彩(可提供风控建模干货经验). 还记得之前发表的3D星空图吗?一直想给喜欢的星空图加上背景图片和音乐. 经过研究 ...

  8. python台风动图绘制_使用Python绘制台风轨迹图的示例代码

    参考: 使用CMA热带气旋最佳路径数据集,对我国周边的台风进行绘制 import re import os import numpy as np import matplotlib.pyplot as ...

  9. python 股票图表_k线图分析法_【趣味案例】用Python绘制K线图,一眼看清股市状况...

    本文介绍关于[趣味案例]用Python绘制K线图,一眼看清股市状况及神一般的裸k交易法,精髓就这三步,一目了然!精髓就这三步,一目了然!(附图解析)的相关内容. [趣味案例]用Python绘制K线图, ...

  10. python画折线图显示点值-Python 绘制可视化折线图

    1. 用 Numpy ndarray 作为数据传入 ply import numpy as np import matplotlib as mpl import matplotlib.pyplot a ...

最新文章

  1. 国家地理:子宫日记 Womb
  2. [css] 说说你对GPU的理解,举例说明哪些元素能触发GPU硬件加速?
  3. Vue.js 第1章 Vue常用指令学习
  4. 系统权限控制设计001---RBAC用户角色权限设计方案
  5. 多年JAVA 基础总结
  6. java项目---------------------------嗖嗖移动大厅
  7. 对于System.out.println简单了解
  8. springboot教务评教系统毕业设计源码252116
  9. Could not get a resource since the pool is exhausted
  10. 一个简单的HTML网页 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
  11. 【ITSM】什么是ITSM,IT部门为什么需要ITSM
  12. 3D建模京东商品3D展示怎么做?
  13. java文件批量下载打包成zip
  14. phpstudy mysql建表_MySQL_总结MySQL建表、查询优化的一些实用小技巧,MySQL建表阶段是非常重要的一 - phpStudy...
  15. pdf转换成word转换器在线使用效果
  16. js读取本地文本文件,并生成Excel文件
  17. 什么是安时数(AH)
  18. Ubuntu16.04编译Android 6.0系统源码过程简要记录总结
  19. MySQL WorkBench 8.0 菜单汉化
  20. 怎么用PDF虚拟打印机给PDF添加背景

热门文章

  1. (转载)TL-WN725N V3无线网卡驱动移植与wireless工具wpa_supplicant-2.6
  2. 开发日记-20190329
  3. AngularJS2.0 quick start——其和typescript结合需要额外依赖
  4. JavaScript 运行机制详解:Event Loop
  5. react-native侧滑
  6. 微信开发提示未绑定网页开发者
  7. 关于jQuery中自定义函数的操作
  8. java报表工具FineReport使用中遇到的常见报错及解决办法(三)
  9. XScroll.js更新:加入交错切换效果,附思路
  10. JQuery.validate中文API