python破解旋转汉字验证码_python生成中文验证码,带旋转,带干扰噪音线段

该博客主要介绍了如何使用Python生成随机的汉字字符,并结合PIL库将这些汉字绘制到图像上,创建带有旋转和随机线条的汉字图像。通过GB2312编码和Unicode来实现汉字的随机选取,为验证码或者艺术字生成提供了一种实现方式。
摘要由CSDN通过智能技术生成

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

"""Created on Sun Oct 4 15:57:46 2015

@author: keithguofan"""

importrandomfrom PIL importImage,ImageDraw,ImageFontimportmath,stringclassRandomChar():

@staticmethoddefUnicode():

val= random.randint(0x4E00,0x9FBF)returnunichr(val)

@staticmethoddefGB2312():

head=random.randint(0xB0,0xCF)

body=random.randint(0xA,0xF)

tail=random.randint(0,0xF)

val= (head <<8)|(body<<4)|tail

str="%x" %val#return str.decode('hex').decode('gb2312')

#return str.encode('gb2312').decode('gb2312')

return codecs.decode(str,'hex_codec').decode('gb2312')classImageChar():def __init__(self,fontColor=(0,0,0),

size=(100,40),#fontPath='C:/Windows/Fonts/wqy.ttc',

fontPath='C:/Windows/Fonts/simsun.ttc',

bgColor=(255,255,255),

fontSize=20):

self.size=size

self.fontPath=fontPath

self.bgColor=bgColor

self.fontSize=fontSize

self.fontColor=fontColor

self.font=ImageFont.truetype(self.fontPath,self.fontSize)

self.image=Image.new('RGB',size,bgColor)defrotate(self):

self.image.rotate(random.randint(0,30),expand=0)defdrawText(self,pos,txt,fill):

draw=ImageDraw.Draw(self.image)#print(pos)

#print(txt)

#print(self.font)

#print(fill)

draw.text(pos,txt,font=self.font,fill=fill)deldrawdefrandRGB(self):return (random.randint(0,255),

random.randint(0,255),

random.randint(0,255))defrandPoint(self):

(width,height)=self.sizereturn(random.randint(0,width),random.randint(0,height))defrandLine(self,num):

draw=ImageDraw.Draw(self.image)for i inrange(0,num):

draw.line([self.randPoint(),self.randPoint()],self.randRGB())deldrawdefrandChinese(self,num):

gap=5start=0for i inrange(0,num):

char=RandomChar().GB2312()

x=start + self.fontSize * i +random.randint(0,gap)+gap*i

self.drawText((x,random.randint(-5,5)),RandomChar().GB2312(),self.randRGB())

self.rotate()

self.randLine(18)defsave(self,path):

self.image.save(path)if __name__ == '__main__':

ic=ImageChar(fontColor=(100,211,90))

ic.randChinese(4)

ic.save("5.jpeg")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值