Python generates Digital Image Code sharing,
This article shares several pieces of Python code for generating digital images. For more information, see. The details are as follows:
Final Version
# -*- coding:utf-8 -*-from PIL import Image,ImageFont,ImageDraw,ImageFilterimport randomimport osimport timeclass Code(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 def setFontSize(self, size): self.fontSize = size; def getDigit(self, digit): return str(digit) def getPannel(self): pannel = Image.new('RGBA',self.imgSize,self.bgColor) return pannel def getFont(self, fontFile='./Arial.ttf'): return ImageFont.truetype(fontFile, self.fontSize) def getTextPos(self, digit, font): text = self.getDigit(digit) textWidth,textHeight = font.getsize(text); imgWidth,imgHeight = self.imgSize textPos = ((imgWidth-textWidth)/2, (imgHeight-textHeight)/2) return textPos def rotateImg(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) return image def createImg(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) return codeImg def saveImg(self, img, savePath, imgName): img.save(savePath+'/'+imgName)def createPath(path): if not os.path.exists(path): os.makedirs(path)def createImages(code,rootPath='./images',digitList=range(10), fontSizeList=range(18,30),\ angleList=[(45,90),(-45,45),(-45,-90)]): for index,angles in enumerate(angleList): if index==0: angleRange = '-90_-45' elif index == 1: angleRange = '-45_45' else: angleRange = '45_90' anglepath = os.path.join(rootPath, angleRange) createPath(anglepath) for digit in digitList: digitpath = os.path.join(anglepath, 'x'+str(digit)) createPath(digitpath) for size in fontSizeList: 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' if os.path.exists(imagesPath): os.system('rm -rf '+imagesPath) os.mkdir(imagesPath) code = Code() for i in range(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 -*-from PIL import Image,ImageFont,ImageDraw,ImageFilterimport randomimport osclass Captcha(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 = '' def rotate(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) def randColor(self): self.fontColor = (random.randint(0,250),random.randint(0,250),random.randint(0,250)) # def randNum(self,bits): # return ''.join(str(random.randint(0,9)) for i in range(bits)) def setNum(self, num): return num; def write(self,text,x,y): draw = ImageDraw.Draw(self.image) draw.text((x,y),text,fill=self.fontColor,font=self.font) def writeNum(self, num, angle): x = 2 y = -2 self.text = num self.fontColor = (0, 0, 0) self.write(num, x, y) self.rotate(angle) return self.text # character # xplus = 15 # for text in self.texts: # self.randColor() # self.fontColor = (0, 0, 0) # self.write(text, x, y) # self.rotate(angle) # self.rotate(random.randint(-10,10)) # x += xplus # return self.texts def save(self, save_path): # self.image.save('captcha.jpg') self.image.save(save_path)pic_root_path = './pic'if not os.path.exists(pic_root_path): os.mkdir(pic_root_path)angles = [(45,90),(-45,45),(-90,-45)]for i in range(10): pic_num_path = os.path.join(pic_root_path, 'pic'+str(i)) if not os.path.exists(pic_num_path): os.mkdir(pic_num_path) for angle_i in angles: angle_name = str(angle_i[0])+'_'+str(angle_i[1]) pic_angle_path = os.path.join(pic_num_path, angle_name) if not os.path.exists(pic_angle_path): os.mkdir(pic_angle_path) for angle in range(angle_i[0], angle_i[1]): for fontsize in range(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) # if not os.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()
Randomly generate a single digital image of various sizes and rotation angles
#-*-Coding: UTF-8-*-from PIL import Image, ImageFont, ImageDraw, ImageFilterimport randomimport osimport timeclass Captcha (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 = ''def rotate (self, angle): rot = self. image. rotate (angle, expand = 0) fff = Image. new ('rgba', rot. size, (255,) * 4) self. image = Image. composite (rot, fff, rot) def randColor (self): self. fontColor = (random. randint (0,250), random. randint (0,250), random. randint (0,250) def setNum (self, num): return num; def write (self, text, x, y): draw = ImageDraw. draw (self. image) draw. text (x, y), text, fill = self. fontColor, font = self. font) def writeNum (self, num, angle): x = 2 y =-2 self. text = num self. fontColor = (0, 0, 0) self. write (num, x, y) self. rotate (angle) return self. text def save (self, save_path): # self. image = self. image. filter (ImageFilter. EDGE_ENHANCE_MORE) # filter, boundary enhancement self. image. save (save_path) pic_root_path = '. /pic 'If not OS. path. exists (pic_root_path): OS. mkdir (pic_root_path) angles = [(45, 90), (-45, 45), (-90,-45)] for I in range (10): pic_num_path = OS. path. join (pic_root_path, 'x' + str (I) if not OS. path. exists (pic_num_path): OS. mkdir (pic_num_path) for angle_ I in angles: angle_name = str (angle_ I [0]) + '_' + str (angle_ I [1]) pic_angle_path = OS. path. join (pic_num_path, angle_name) if not OS. path. exists (pic_angle_path): OS. mkdir (pic_angle_path) for fontsize in range (25,29): for j in range (2500): # Keep 5 decimal places 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 = comment 'save_path = OS. path. join (pic_angle_path, img_name) img. save (save_path)
Text Center
# -*- coding:utf-8 -*-from PIL import Image,ImageFont,ImageDraw,ImageFilterimport randomimport osimport timeimgWidth = 20imgHeight = 24fontSize = 28backGroundColor = (255,)*4fontColor = (0,)*3text = '0'font = ImageFont.truetype('./Arial.ttf', fontSize)codeimg = Image.new('RGBA',(imgWidth,imgHeight), backGroundColor)imagePath = './codes'if not os.path.exists(imagePath): os.mkdir(imagePath)textWidth, textHeight = font.getsize(text)textLeft = (imgWidth-textWidth)/2textTop = (imgHeight-textHeight)/2draw = ImageDraw.Draw(codeimg)draw.text(xy=(textLeft,textTop),text=text,fill=fontColor,font=font)rot = codeimg.rotate(90,expand=0)codeimg.rotatefff = Image.new('RGBA', rot.size,backGroundColor)codeimg = Image.composite(rot, fff, rot)codeimg.show()# codeimg.save('./codes/test.jpg')
The above is all about Python's Digital Image Generation Code sharing. I hope it will be helpful to you. Welcome:Three methods for deleting the Python list: code sharing,Python file read/write and Exception Code exampleIf you have any questions, please feel free to leave a message.