PIL模块与随机生成中文验证码
今天我们要学习的内容是如何利用Python生成一个随机的中文验证码,并将图片保存为.jpeg格式。
在这之前,你首先得了解Python中的PIL库。PIL是Python Imaging Library的简称,PIL是一个Python处理
图片的库,提供了一系列模块和方法,比如:裁切,平移,旋转,改变尺寸等等。在PIL库中,任何一个图像都是用
Image对象来表示的,所以要加载一张图片,最简单的形式如下:
from PIL import Imageimage = Image.open("1.jpeg")
在PIL库中,最常用的模块有Image,ImageDraw,ImageEnhance,ImageFile等。
PIL的下载地址为:http://www.pythonware.com/products/pil/
接下来学习PIL中一些常见的操作:
(1)改变图片大小
from PIL import Imageimage = Image.open("1.jpeg")
new_img = image.resize((256,256),Image.BILINEAR)
new_img.save("2.jpeg")
(2)旋转图片
from PIL import Imageimage = Image.open("1.jpeg")
new_img = image.rotate(45)
new_img.save("2.jpeg")
(3)直线绘制
PIL库中的ImageDraw模块提供了图形绘制的基本功能,可以绘制直线,弧线,椭圆,矩形等等。
from PIL import Image,ImageDrawimage = Image.open("2.jpeg")
draw = ImageDraw.Draw(image)
width,height = image.size
draw.line(((0,0),(width-1,height-1)),fill=255)
draw.line(((0,height-1),(width-1,0)),fill=255)
image.save("2.jpeg")
(4)绘制圆
from PIL import Image,ImageDrawimage = Image.open("2.jpeg")
draw = ImageDraw.Draw(image)
width,height = image.size
draw.arc((0,0,width-1,height-1),0,360,fill=255)
image.save("2.jpeg")
更多方法可以参见帮助文档。
现在我们来研究利用Python如何生成中文验证码。其实这个问题简单,我们都知道验证码一般是用来防止网络机器
人采用无限次数的登录尝试破解密码,那么我们需要对这张图片随机生成中文字符来验证,一般来说会把图片的字表
现得很模糊,这样有效地防止机器人识别。所以我们除了要随机生成汉字,还要加入一些干扰线条等等。
# -*- coding: utf-8 -*-
from PIL import Image,ImageDraw,ImageFont
import random
import math, string class RandomChar():@staticmethoddef Unicode():val = random.randint(0x4E00, 0x9FBF)return unichr(val) @staticmethoddef GB2312():head = random.randint(0xB0, 0xCF)body = random.randint(0xA, 0xF)tail = random.randint(0, 0xF)val = ( head << 8 ) | (body << 4) | tailstr = "%x" % valreturn str.decode('hex').decode('gb2312') class ImageChar:def __init__(self, fontColor = (0, 0, 0),size = (100, 40),fontPath = 'SIMSUN.TTC',bgColor = (255, 255, 255),fontSize = 20):self.size = sizeself.fontPath = fontPathself.bgColor = bgColorself.fontSize = fontSizeself.fontColor = fontColorself.font = ImageFont.truetype(self.fontPath, self.fontSize)self.image = Image.new('RGB', size, bgColor) def rotate(self):self.image.rotate(random.randint(0, 30), expand=0) def drawText(self, pos, txt, fill):draw = ImageDraw.Draw(self.image)draw.text(pos, txt, font=self.font, fill=fill)def randRGB(self):return (random.randint(0, 255),random.randint(0, 255),random.randint(0, 255)) def randPoint(self):(width, height) = self.sizereturn (random.randint(0, width), random.randint(0, height)) def randLine(self, num):draw = ImageDraw.Draw(self.image)for i in range(0, num):draw.line([self.randPoint(), self.randPoint()], self.randRGB())def randChinese(self, num):gap = 5start = 0for i in range(0, num):char = RandomChar().GB2312()x = start + self.fontSize * i + random.randint(0, gap) + gap * iself.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB())self.rotate()self.randLine(18) def save(self, path):self.image.save(path)ic = ImageChar(fontColor=(100,211, 90))
ic.randChinese(4)
ic.save("1.jpeg")
运行结果:
PIL模块与随机生成中文验证码相关推荐
- 用Python生成随机的中文验证码图片
大家都在 Python论坛里讨论.交流,你还在等什么!赶快加入! 在登录很多网站的时候,他们已经不在使用简单的英文和数字的验证码,为了防止恶心注册和群发软件的侵袭,现在都开始使用中文的验证码了. 今天 ...
- php怎样验证验证码对错,PHP生成中文验证码并检测对错实例
PHP生成中文验证码并检测对错实例,中文验证码的例子还是比较少的,今天给大家分享一下,支持自定义中文.字体.背景色等 生成验证码,注意font字体路径要对,否则显示图片不存在session_start ...
- javaweb生成中文验证码
javaweb生成中文验证码 整理一份四字的文字列表的text文档 配置web.xml 创建java代码 书写index.jsp访问页 看到有的网页的验证码是中文的,就想着自己也写一个,百度了下有关知 ...
- 【SQL Server 学习系列】-- sql 随机生成中文名字
[SQL Server 学习系列]-- sql 随机生成中文名字 原文:[SQL Server 学习系列]-- sql 随机生成中文名字 1 DECLARE @fName TABLE(Id INT I ...
- php生成随机汉字,PHP随机生成中文段落示例【测试网站内容时使用】
本文实例讲述了PHP随机生成中文段落.分享给大家供大家参考,具体如下: 在创建网站的时候,很多时候都需要输入一些中文的段落来填充页面,大多数会是找一些新闻之类的来复制粘贴. 以下代码是利用php来随机 ...
- Java随机生成中文姓名+手机+邮编+地址
import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @author X-rapido */ ...
- 【厚积薄发系列】C++项目总结8—全自动和半自动随机生成中文字符串
需求背景: 最近数据库相关的代码,功能类似会员数据.代码写完后,需要模拟数据测试接口,其中一个字段就是用户姓名,需要模拟中文的用户名,所以就有了下面的随机生成中文的代码. 具体实现: #include ...
- js 利用Unicode码随机生成中文昵称
前言 网上前辈们分享的随机昵称生成方式,都是通过随机获取事先定义的数组内容进行组合来实现随机生成一个类似真名的数据(最近我做的一个项目需求中的,要求随机生成昵称但是不要真名),那这就有点蛋疼了,我总不 ...
- Java开源 之随机生成中文姓名,手机号,邮编,住址
import java.util.HashMap; import java.util.Map;/*** 随机生成中文姓名,性别,Email,手机号,住址*/ public class RandomVa ...
最新文章
- Python的零基础超详细讲解(第一天)-Python简介以及下载
- 花33元租号玩2小时王者荣耀,未成年为绕过防沉迷用上黑科技上号器App
- docker学习实践之路[第一站]环境安装
- nand ubi -1 nand基础
- docker 加速镜像 阿里云镜像
- java jtable导出txt_如何将jtable中的文本数据保存到文件中
- python多大学_用Python看看你的大学A4纸还剩多少!
- 二进制转8421bcd码_中山CVI转CVBS芯视音科技原装
- 新版 IDEA 发布,牛逼!网友:内存占用有所好转!
- Matlab实现图像识别(八)
- 联想thinkPad中锁屏壁纸的本地位置(联想软件商店)
- 毕业论文-word中自动生成中英文双目录(TC域,支持更新不覆盖)
- 【学习OpenCV4】进度条实现总结
- ArcGIS最详细的地图制作教程
- Git 配置别名 —— 让命令变得更简单
- tcl 950 android 7,TCL 950测评:商务旗舰手机界的一股清流
- (Tiled官方文档翻译)第十节:使用无限地图(Tiled1.1)
- pytorch中tf.nn.functional.softmax(x,dim = -1)对参数dim的理解
- 修改系统文件更改权限
- GIS论坛网站推荐!