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文件的读写和异常代码示例等,有问题可以随时留言,欢迎大家交流讨论。