Python生成数字图片代码分享
本文向大家分享了几段Python生成数字图片的代码,喜欢的朋友可以参考。具体如下:
最终版本
#-*-coding:utf-8-*-
fromPILimportImage,ImageFont,ImageDraw,ImageFilter
importrandom
importos
importtime
classCode(object):
def__init__(self,imgSize=(35,35),\
fontSize=25,bgColor=(255,)*4,fontColor=(0,0,0)):
self.imgSize=imgSize
self.fontSize=fontSize
self.bgColor=bgColor
self.fontColor=fontColor
defsetFontSize(self,size):
self.fontSize=size;
defgetDigit(self,digit):
returnstr(digit)
defgetPannel(self):
pannel=Image.new('RGBA',self.imgSize,self.bgColor)
returnpannel
defgetFont(self,fontFile='./Arial.ttf'):
returnImageFont.truetype(fontFile,self.fontSize)
defgetTextPos(self,digit,font):
text=self.getDigit(digit)
textWidth,textHeight=font.getsize(text);
imgWidth,imgHeight=self.imgSize
textPos=((imgWidth-textWidth)/2,(imgHeight-textHeight)/2)
returntextPos
defrotateImg(self,image,angle=0,expand=0):
rot=image.rotate(angle,expand)
fff=Image.new('RGBA',rot.size,self.bgColor)
image=Image.composite(rot,fff,rot)
returnimage
defcreateImg(self,digit,font,angle):
codeImg=Image.new('RGBA',self.imgSize,self.bgColor)
draw=ImageDraw.Draw(codeImg);
text=self.getDigit(digit)
textPos=self.getTextPos(digit,font)
draw.text(xy=textPos,text=text,fill=self.fontColor,font=font)
codeImg=self.rotateImg(codeImg,angle)
returncodeImg
defsaveImg(self,img,savePath,imgName):
img.save(savePath+'/'+imgName)
defcreatePath(path):
ifnotos.path.exists(path):
os.makedirs(path)
defcreateImages(code,rootPath='./images',digitList=range(10),fontSizeList=range(18,30),\
angleList=[(45,90),(-45,45),(-45,-90)]):
forindex,anglesinenumerate(angleList):
ifindex==0:
angleRange='-90_-45'
elifindex==1:
angleRange='-45_45'
else:
angleRange='45_90'
anglepath=os.path.join(rootPath,angleRange)
createPath(anglepath)
fordigitindigitList:
digitpath=os.path.join(anglepath,'x'+str(digit))
createPath(digitpath)
forsizeinfontSizeList:
angle=round(random.uniform(angles[0],angles[1]),5)
code.setFontSize(size)
imgName=str(digit)+'_'+str(size)+'_'+str(angle)+'.jpg'
img=code.createImg(digit,code.getFont(),angle)
code.saveImg(img,digitpath,imgName)
if__name__=='__main__':
imagesPath='./images'
ifos.path.exists(imagesPath):
os.system('rm-rf'+imagesPath)
os.mkdir(imagesPath)
code=Code()
foriinrange(1000):
createImages(code)
#test...
#code=Code()
#img=code.createImg(5,code.getFont(),0)
#code.saveImg(img,savePath,'test.jpg')
#img.show()
print'hello'
#-*-coding:utf-8-*-
fromPILimportImage,ImageFont,ImageDraw,ImageFilter
importrandom
importos
classCaptcha(object):
def__init__(self,size=(20,24),fontSize=20):
self.font=ImageFont.truetype('./fonts/Arial.ttf',fontSize)
self.size=size
self.image=Image.new('RGBA',self.size,(255,)*4)
#self.texts=self.randNum(1)
self.text=''
defrotate(self,angle):
#rot=self.image.rotate(random.randint(-10,10),expand=0)
rot=self.image.rotate(angle,expand=0)
fff=Image.new('RGBA',rot.size,(255,)*4)
self.image=Image.composite(rot,fff,rot)
defrandColor(self):
self.fontColor=(random.randint(0,250),random.randint(0,250),random.randint(0,250))
#defrandNum(self,bits):
#return''.join(str(random.randint(0,9))foriinrange(bits))
defsetNum(self,num):
returnnum;
defwrite(self,text,x,y):
draw=ImageDraw.Draw(self.image)
draw.text((x,y),text,fill=self.fontColor,font=self.font)
defwriteNum(self,num,angle):
x=2
y=-2
self.text=num
self.fontColor=(0,0,0)
self.write(num,x,y)
self.rotate(angle)
returnself.text
#character
#xplus=15
#fortextinself.texts:
#self.randColor()
#self.fontColor=(0,0,0)
#self.write(text,x,y)
#self.rotate(angle)
#self.rotate(random.randint(-10,10))
#x+=xplus
#returnself.texts
defsave(self,save_path):
#self.image.save('captcha.jpg')
self.image.save(save_path)
pic_root_path='./pic'
ifnotos.path.exists(pic_root_path):
os.mkdir(pic_root_path)
angles=[(45,90),(-45,45),(-90,-45)]
foriinrange(10):
pic_num_path=os.path.join(pic_root_path,'pic'+str(i))
ifnotos.path.exists(pic_num_path):
os.mkdir(pic_num_path)
forangle_iinangles:
angle_name=str(angle_i[0])+'_'+str(angle_i[1])
pic_angle_path=os.path.join(pic_num_path,angle_name)
ifnotos.path.exists(pic_angle_path):
os.mkdir(pic_angle_path)
forangleinrange(angle_i[0],angle_i[1]):
forfontsizeinrange(25,28):
img=Captcha(size=(20,24),fontSize=fontsize)
num=img.writeNum(str(i),angle)
img_name=str(i)+'_'+str(fontsize)+'_'+str(angle)+'.bmp'
save_path=os.path.join(pic_angle_path,img_name)
img.save(save_path)
#img=Captcha()
#num=img.writeNum(str(i),random.randint(-90,-45))
#img_name=str(i)+'.jpg'
#pic_path='./pic'+str(i)
#ifnotos.path.exists(pic_path):
#os.mkdir(pic_path)
#save_path=os.path.join(pic_path,img_name)
#save_path=os.path.join(pic_root_path,save_path)
#img.save(save_path)
#img.image.show()
#img.save()
随机生成各种size和旋转角度的单个数字图片
#-*-coding:utf-8-*-
fromPILimportImage,ImageFont,ImageDraw,ImageFilter
importrandom
importos
importtime
classCaptcha(object):
def__init__(self,size=(20,24),fontSize=20):
self.font=ImageFont.truetype('./fonts/Arial.ttf',fontSize)
self.size=size
self.image=Image.new('RGBA',self.size,(255,)*4)
self.text=''
defrotate(self,angle):
rot=self.image.rotate(angle,expand=0)
fff=Image.new('RGBA',rot.size,(255,)*4)
self.image=Image.composite(rot,fff,rot)
defrandColor(self):
self.fontColor=(random.randint(0,250),random.randint(0,250),random.randint(0,250))
defsetNum(self,num):
returnnum;
defwrite(self,text,x,y):
draw=ImageDraw.Draw(self.image)
draw.text((x,y),text,fill=self.fontColor,font=self.font)
defwriteNum(self,num,angle):
x=2
y=-2
self.text=num
self.fontColor=(0,0,0)
self.write(num,x,y)
self.rotate(angle)
returnself.text
defsave(self,save_path):
#self.image=self.image.filter(ImageFilter.EDGE_ENHANCE_MORE)#滤镜,边界加强
self.image.save(save_path)
pic_root_path='./pic'
ifnotos.path.exists(pic_root_path):
os.mkdir(pic_root_path)
angles=[(45,90),(-45,45),(-90,-45)]
foriinrange(10):
pic_num_path=os.path.join(pic_root_path,'x'+str(i))
ifnotos.path.exists(pic_num_path):
os.mkdir(pic_num_path)
forangle_iinangles:
angle_name=str(angle_i[0])+'_'+str(angle_i[1])
pic_angle_path=os.path.join(pic_num_path,angle_name)
ifnotos.path.exists(pic_angle_path):
os.mkdir(pic_angle_path)
forfontsizeinrange(25,29):
forjinrange(2500):
#Keep5decimalplaces
angle=round(random.uniform(angle_i[0],angle_i[1]),5)
img=Captcha(size=(20,24),fontSize=fontsize)
num=img.writeNum(str(i),angle)
img_name='x'+str(j)+'_'+str(fontsize)+'_'+str(angle)+'_'+str(num)+'.jpg'
save_path=os.path.join(pic_angle_path,img_name)
img.save(save_path)
文字居中
#-*-coding:utf-8-*-
fromPILimportImage,ImageFont,ImageDraw,ImageFilter
importrandom
importos
importtime
imgWidth=20
imgHeight=24
fontSize=28
backGroundColor=(255,)*4
fontColor=(0,)*3
text='0'
font=ImageFont.truetype('./Arial.ttf',fontSize)
codeimg=Image.new('RGBA',(imgWidth,imgHeight),backGroundColor)
imagePath='./codes'
ifnotos.path.exists(imagePath):
os.mkdir(imagePath)
textWidth,textHeight=font.getsize(text)
textLeft=(imgWidth-textWidth)/2
textTop=(imgHeight-textHeight)/2
draw=ImageDraw.Draw(codeimg)
draw.text(xy=(textLeft,textTop),text=text,fill=fontColor,font=font)
rot=codeimg.rotate(90,expand=0)
codeimg.rotate
fff=Image.new('RGBA',rot.size,backGroundColor)
codeimg=Image.composite(rot,fff,rot)
codeimg.show()
#codeimg.save('./codes/test.jpg')
以上就是本文关于Python生成数字图片代码分享的全部内容,希望对大家有所帮助。欢迎参阅:Python列表删除的三种方法代码分享、Python文件的读写和异常代码示例等,有问题可以随时留言,欢迎大家交流讨论。