
之前做ppt的時(shí)候,一直想做這種圖,但是一直沒有找到合適的圖片處理軟件可以做,正好最近接觸PIL包,那么就用PIL來寫個(gè)代碼實(shí)現(xiàn)以下吧!
生成背景墻的,還是按照三步走的策略:下載圖片、更改圖片為統(tǒng)一尺寸(不是裁剪!不是裁剪!不是裁剪?。⑸杀尘皦?。
1.下載圖片
with open('.\src.txt','r',encoding='utf-8') as f:
? ? i=1
? ? for each in f:
? ? ? ? urllib.request.urlretrieve(('https:'+each),(str(i)+ ".jpg"))
? ? ? ? i+=1
? ? ? ? print(i)
? ? ? ? time.sleep(random.choice(range(1,3)))
2.更改圖片尺寸
觀察下載后的頭像圖片,會(huì)發(fā)現(xiàn)每個(gè)頭像的大小和尺寸不一致。這樣子,如果直接做背景墻的話,會(huì)提示image do not match的錯(cuò)誤。因此在進(jìn)行制作背景墻之前,需要把所有的圖片更改成統(tǒng)一的尺寸。并保證所有的頭像圖片存放在path路徑下面的一個(gè)文件夾下面,并且最好此path路徑下只有一個(gè)文件夾。
path = "E:/數(shù)據(jù)學(xué)習(xí)資料/自己做的小項(xiàng)目/爬取簡書推薦作者/src/"
dirlist = []
for root, dirs, files in os.walk(path):
? ? ?for dir in dirs :
? ? ? ? ? ?dirlist.append(dir)
print(dirlist) ?#看路徑下有幾個(gè)文件夾
for dir in dirlist:
? ? images = [] # images in each folder
? ? for root, dirs, files in os.walk(path+dir): # traverse each folder
? ? ? ? print(path+dir+'')
? ? ? ? i=1
? ? ? ? for file in files: #遍歷文件夾中的每一個(gè)文件
? ? ? ? ? ? print(file)
? ? ? ? ? ? images.append(Image.open(path+dir+'/'+file))
? ? ? ? ? ? im=Image.open(path+dir+'/'+file)
? ? ? ? ? ? im=im.convert('RGBA')
? ? ? ? ? ? width, height = im.size
? ? ? ? ? ? width=100 #修改圖片的寬度
? ? ? ? ? ? height=100 #修改圖片的高度
? ? ? ? ? ? resizedim=im.resize((width,height)) #修改圖片的尺寸
? ? ? ? ? ? name=path+str(i)+'.jpg' #定義圖片名稱
? ? ? ? ? ? resizedim.save(name) #保存圖片
? ? ? ? ? ? i+=1
3.生成背景墻
按照下面這個(gè)代碼里面進(jìn)行相應(yīng)的參數(shù)修改,運(yùn)行之后就能在path路徑下找到生成的圖片了。
import os
from PIL import Image
UNIT_SIZE = 100 # the size of image 根據(jù)實(shí)際情況修改
def pinjie(images,num):
? ? target = Image.new('RGB', (UNIT_SIZE*20, UNIT_SIZE*8))? # result is 80*2 根據(jù)實(shí)際情況修改
? ? for j in range(1,9):? #這里選擇的是8列,因此是1-9,其他情況可以看著修改成1-n
? ? ? ? n=20*(j-1) #因?yàn)槭?0張圖片一行,所以是20,換成別的數(shù)字需要修改
? ? ? ? m=20*j
? ? ? ? for i in range(n,m):
? ? ? ? ? ? left=UNIT_SIZE*(i-n)
? ? ? ? ? ? upper=UNIT_SIZE*(j-1)
#? ? ? ? ? right=left+UNIT_SIZE #左上有了,右下可以不寫
#? ? ? ? ? lower=upper+UNIT_SIZE
? ? ? ? ? ? target.paste(images[i], (left,upper))
? ? quality_value = 100
? ? target.save(path+dirlist[num]+'.jpg', quality = quality_value)
path = "E:/數(shù)據(jù)學(xué)習(xí)資料/自己做的小項(xiàng)目/爬取簡書推薦作者/src/"
dirlist = [] # all dir name
for root, dirs, files in os.walk(path):? ?
? ? for dir in dirs :
? ? ? ? dirlist.append(dir) #找到path下所有的文件名,最好只有一個(gè)
num = 0
for dir in dirlist:
? ? images = [] # images in each folder
? ? for root, dirs, files in os.walk(path+dir): # traverse each folder
? ? ? ? print(path+dir+'')
? ? ? ? for file in files:
? ? ? ? ? ? images.append(Image.open(path+dir+'/'+file)) #注意這個(gè)地方,images里面不是直接添加圖片地址,而是先打開,避免了轉(zhuǎn)義的發(fā)生
? ? pinjie(images,num) #加這個(gè)num是連續(xù)生成多張圖片的意思
? ? num +=1
? ? print(num)
? ? images = []