前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python简易验证码生成程序

Python简易验证码生成程序

作者头像
Python小屋屋主
发布2018-04-16 13:22:23
6720
发布2018-04-16 13:22:23
举报
文章被收录于专栏:Python小屋Python小屋

from PIL import Image, ImageDraw, ImageFont

import random

import string

#所有可能的字符,主要是英文字母和数字

characters = string.ascii_letters+string.digits

#获取指定长度的字符串

def selectedCharacters(length):

'''length:the number of characters to show'''

result = ""

for i in range(length):

result += random.choice(characters)

return result

def getColor():

'''get a random color'''

r = random.randint(0,255)

g = random.randint(0,255)

b = random.randint(0,255)

return (r,g,b)

def main(size=(200,100), characterNumber=6, bgcolor=(255,255,255)):

imageTemp = Image.new('RGB', size, bgcolor)

#设置字体和字号

font = ImageFont.truetype('c:\\windows\\fonts\\TIMESBD.TTF', 48)

draw = ImageDraw.Draw(imageTemp)

text = selectedCharacters(characterNumber)

width, height = draw.textsize(text, font)

#绘制验证码字符串

offset = 2

for i in range(characterNumber):

offset += width//characterNumber

position = (offset, (size[1]-height)//2+random.randint(-10,10))

draw.text(xy=position, text=text[i], font=font, fill=getColor())

#对验证码图片进行简单变换,这里采用简单的点运算

imageFinal = Image.new('RGB', size, bgcolor)

pixelsFinal = imageFinal.load()

pixelsTemp = imageTemp.load()

for y in range(0, size[1]):

offset = random.randint(-1,1)

for x in range(0, size[0]):

newx = x+offset

if newx>=size[0]:

newx = size[0]-1

elif newx<0:

newx = 0

pixelsFinal[newx,y] = pixelsTemp[x,y]

draw = ImageDraw.Draw(imageFinal)

#绘制干扰噪点像素

for i in range(int(size[0]*size[1]*0.07)):

draw.point((random.randint(0,size[0]), random.randint(0,size[1])), fill=getColor())

#绘制干扰线条

for i in range(8):

start = (0, random.randint(0, size[1]-1))

end = (size[0], random.randint(0, size[1]-1))

draw.line([start, end], fill=getColor(), width=1)

#绘制干扰弧线

for i in range(8):

start = (-50, -50)

end = (size[0]+10, random.randint(0, size[1]+10))

draw.arc(start+end, 0, 360, fill=getColor())

#保存验证码图片

imageFinal.save("result.jpg")

imageFinal.show()

if __name__=="__main__":

main((200,100), 8, (255,255,255))

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档