python动态验证码_Python 模拟生成动态产生验证码图片的方法

模拟动态产生验证码图片

模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 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 是模糊滤波。

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

dbf3bb418011935aff8a11f253747278.png

ef9076cb3b351be2ac38f16c1326a4b1.png

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()

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

bd20980caed572dbd96a59d9beb8aea5.png

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

IOError: cannot open resourse

出现这个问题的原因是 PIL 无法定位到字体文件的位置,可以考虑直接提供绝对位置。 font = ImageFont.truetype('/absolute/path/font.ttf', 36)

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

https://pillow.readthedocs.org/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解 CSS (1): 先做一个样式表测试工具

一直没有把样式表系统一下, 春节假期有空, 不能再等了.为了方便学习, 先写了一个样式表测试工具: CssTest(点击下载)工具非常简单, 写了 10 行左右的代码; 运行效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, …

Java加密与解密的艺术~数字证书~模型分析

1、证书签发 数字证书需要经由认证机构签发,其流程如图: 数字证书的颁发流程可简述为如下过程: 1)、由数字证书需求方产生自己的密钥对。 2)、由数字证书需求方将算法、公钥和证书申请者身份信息传送给认证机构。…

公告!2018年度国家科技奖提名公示,信息科学组获47项提名

作者:杨文3 月 23 日,国家科学技术奖励工作办公室发布第 89 号公告:2018 年度国家科学技术奖提名工作已结束,共收到有关单位和专家提名的国家自然科学奖项目 272 项,技术发明奖项目 306 项 (通用项目 247 项&#xff0…

Python 虚拟环境

参考:http://www.cnblogs.com/wilber2013/p/4774022.html virtualenv documentation: https://virtualenv.pypa.io/en/latest/ virtualenvwrapper documentation: http://virtualenvwrapper.readthedocs.org/en/latest/http://docs.python-guide.org/en/latest/dev/…

VR变革已来!华为完成业界首个5G实验网下Cloud VR业务验证

来源:智吧网近日,华为、北京传送科技有限公司(TPCAST)联合完成业界首个5G实验网下Cloud VR业务验证,实现了交互式CG(Computer Graphics)VR内容的实时云端渲染。何以见得这足以被历史铭记&#x…

预测|十张图带你了解2018年机器人行业趋势与前景

来源:前瞻产业研究院3月15日,腾讯对外公布了其2018年在AI领域的三大核心战略,其中包括成立机器人实验室“Robotics X”。当然,腾讯并不是唯一一家展开行动的互联网巨头,“三巨头”中的另外两家——百度和阿里&#xff…

python mro c3_Python 19 MRO和C3算法

1.python经典类的MRO经典类的MROclass A: pass class B(A): pass class C(A): pass class D(B, C): pass class E: pass class F(D, E): pass class G(F, D): pass class H: pass class Foo(H, G): passenter description here2. python新式类的MRO, C3算法新式类的MROclass A:…

Java加密与解密的艺术~安全协议~模型分析

模型分析 1、协商算法 RNC:Random Number Client RNS:Random Number Server 2、验证证书 3、产生密钥 PMS:Pre-Master Secret(预备主密钥) MS:Master Secret(主密钥) 4、加密交互

漫天风口,一地泡沫,消费机器人四年跌宕史

来源:OFweek 作者:邹大湿提及科技浪潮,AI 和机器人是逃不过的。2018年,AI依旧很火,但几年前曾经燥热的机器人狂潮,似乎凉凉了?那个曾经宣称万亿市场的智能机器人,究竟怎么了&#…

Python操作RabbitMQ

来源:http://www.cnblogs.com/phennry/p/5713274.html 本篇博客主要介绍如何通过Python来操作管理RabbitMQ消息队列,大家在工作中可能遇到很多类似RabbitMQ这种消息队列的中间件,如:ZeroMQ、ActiveMQ、MetaMQ等,我们学…

分享-利用VPC防止病毒软件的进入你的windows电脑

作为一个软件爱好者时不时都会从网上下载一些软件使用,虽然,现在防病毒和木马软件做得很好,但也架不住众多病毒木马的攻击。 所以,我的经验是当我下载一个软件以后,无法判定是否是病毒木马的话,我会安装在虚…

无监督学习最新研究:通过简单的「图像旋转」预测便可为图像特征学习提供强大监督信号

作者:Spyros Gidaris、Praveer Singh、Nikos Komodakis「雷克世界」编译:嗯~是阿童木呀、KABUDA、EVA在过去的几年中,深度卷积神经网络(ConvNets)已经改变了计算机视觉的领域,这是由于它们具有学习高级语义…

Java加密与解密的艺术~安全协议~单向认证服务

1、准备工作 A、域名绑定 在hosts文件末尾追加 127.0.0.1 www.zlex.org B、证书导入 浏览器导入自签名证书文件zlex.cer C、服务器配置 配置SSL/TLS 单向认证 <Connectorport"443"SSLEnabled"true"clientAuth"false"maxThreads"150…

java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释

Java使用3DES加密解密的流程①传入共同约定的密钥(keyBytes)以及算法(Algorithm)&#xff0c;来构建SecretKey密钥对象SecretKey deskey new SecretKeySpec(keyBytes&#xff0c; Algorithm);②根据算法实例化Cipher对象。它负责加密/解密Cipher c1 Cipher.getInstance(Algor…

Python 并行分布式框架 Celery

Celery 官网&#xff1a;http://www.celeryproject.org Celery 官方文档英文版&#xff1a;http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版&#xff1a;http://docs.jinkan.org/docs/celery celery配置&#xff1a;http://docs.jinkan.org/docs/c…

java判断是否是路径_java判断是否是目录

java判断是否是目录&#xff1a;/*** 创建目录** param path*/public static void CreatFileDir(String path) {try {File file new File(path);if(file.getParentFile().isDirectory()){//判断上级目录是否是目录if(!file.exists()){ //如果文件目录不存在file.mkdirs(); //创…

中国数字化进程比发达国家快,小程序让我感到自豪 | IT领袖峰会

作者&#xff1a; 张驰2018年3月25日上午举办的第10届2018中国&#xff08;深圳&#xff09;IT领袖峰会上&#xff0c;腾讯公司董事会主席兼首席执行官发表了 “数字中国的机遇与探索” 主题演讲。在演讲中表示&#xff0c;不管什么产业都是需要科技来对它进行改造升级、转型。…

Java加密与解密的艺术~安全协议~双向认证服务

双向认证服务 1、准备工作 A、证书导入 导入ca.p12 导入client.p12 B、服务器配置 <Connectorport"443"SSLEnabled"true"clientAuth"true"maxThreads"150"protocol"HTTP/1.1"scheme"https"sec…

利用 Celery 构建 Web 服务的后台任务调度模块

来源&#xff1a;http://www.tuicool.com/articles/Enaeymm 任务队列在 Web 服务里的应用 在 Web2.0 后的时代&#xff0c;社交网站、搜索引擎的的迅猛发展对 Web 服务的后台管理系统提出了更高的需求。考虑几个常见的使用场景&#xff1a; 社交网站的用户在其主页发布了一组新…

java元素符号是什么_Java 代码中 @ 符号是什么意思?

展开全部annotation。Annotation&#xff0c;是Java5的新特性&#xff0c;下面是Sun的Tutorial的描述&#xff0c;因为是英文&#xff0c;这里我翻译下&#xff0c;希望能够比较清晰32313133353236313431303231363533e58685e5aeb931333264633435的描述一下Annotation的语法以及…