本文向大家分享了几段Python生成数字图片的代码,喜欢的朋友可以参考。具体如下:
最终版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# -*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw,ImageFilter import random import os import time class 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' |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# -*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw,ImageFilter import random import os class 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() |
随机生成各种size和旋转角度的单个数字图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# -*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw,ImageFilter import random import os import time class 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) #滤镜,边界加强 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 = 'x' + str (j) + '_' + str (fontsize) + '_' + str (angle) + '_' + str (num) + '.jpg' save_path = os.path.join(pic_angle_path, img_name) img.save(save_path) |
文字居中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# -*- coding:utf-8 -*- from PIL import Image,ImageFont,ImageDraw,ImageFilter import random import os import time 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' if not os.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生成数字图片代码分享的全部内容,希望对大家有所帮助。有问题可以随时留言,欢迎大家交流讨论。
原文链接:http://blog.csdn.net/zwx2445205419/article/details/73481409