Python生成數(shù)字圖片代碼分享
本文向大家分享了幾段Python生成數(shù)字圖片的代碼,喜歡的朋友可以參考。具體如下:
最終版本
# -*- 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'
# -*- 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()
隨機(jī)生成各種size和旋轉(zhuǎn)角度的單個(gè)數(shù)字圖片
# -*- 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) #濾鏡,邊界加強(qiáng)
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)
文字居中
# -*- 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')
以上就是本文關(guān)于Python生成數(shù)字圖片代碼分享的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:Python列表刪除的三種方法代碼分享、Python文件的讀寫(xiě)和異常代碼示例等,有問(wèn)題可以隨時(shí)留言,歡迎大家交流討論。
相關(guān)文章
關(guān)于python中remove的一些坑小結(jié)
這篇文章主要給大家介紹了關(guān)于python中remove的一些坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
opencv 圖像加法與圖像融合的實(shí)現(xiàn)代碼
這篇文章主要介紹了opencv 圖像加法與圖像融合的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
利用Python實(shí)現(xiàn)簡(jiǎn)易計(jì)算器的示例代碼
最近學(xué)習(xí)了字符串,運(yùn)算符,條件語(yǔ)句,循環(huán)語(yǔ)句,我在想可以用我最近學(xué)的東西做什么? 看到運(yùn)算我就想到了可以做一個(gè)簡(jiǎn)易的計(jì)算器,感興趣的可以了解一下2022-11-11
python Boltons庫(kù)實(shí)用功能探索(深度復(fù)制類型檢查重試機(jī)制)
這篇文章主要為大家介紹了python Boltons庫(kù)實(shí)用功能探索包含深度復(fù)制類型檢查重試機(jī)制及數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的詳細(xì)步驟
域名資產(chǎn)監(jiān)控,通過(guò)輸入一個(gè)主域名,找到該域名對(duì)應(yīng)的ip地址所在的服務(wù)器的端口開(kāi)閉情況,本文重點(diǎn)給大家介紹用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的問(wèn)題,需要的朋友可以參考下2021-11-11
pytorch 彩色圖像轉(zhuǎn)灰度圖像實(shí)例
今天小編就為大家分享一篇pytorch 彩色圖像轉(zhuǎn)灰度圖像實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python采集某評(píng)論區(qū)內(nèi)容的實(shí)現(xiàn)示例
本文主要介紹了Python采集某評(píng)論區(qū)內(nèi)容的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
django和vue實(shí)現(xiàn)數(shù)據(jù)交互的方法
今天小編就為大家分享一篇django和vue實(shí)現(xiàn)數(shù)據(jù)交互的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

