2018-03-01用PIL拼接背景墻

推薦的前160位作者背景墻

之前做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 = []

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 每個(gè)人都生活在人群之中,有人的地方,就免不了對(duì)話。生活中80%都是日常對(duì)話(甚至更多),20%則是關(guān)鍵對(duì)話,而對(duì)這...
    羽扇綸巾_Q醬閱讀 271評(píng)論 0 0
  • 2018年的第一天,我想談?wù)勥^去的2017,開啟我的2018。2017,實(shí)現(xiàn)我的出國夢(mèng),和男朋友訂婚,通過科二,取...
    每天的檸檬閱讀 450評(píng)論 1 3
  • 【前幕】 轉(zhuǎn)瞬仲夏,天氣愈加炎熱。浮生樓近日生意慘淡,除了零零星星的幾個(gè)小打小鬧的愿望,再無其他特別。都是些兒女情...
    梁暔閱讀 613評(píng)論 0 7
  • 2月 琳琳寒假計(jì)劃如下 奧數(shù)一年級(jí)每天做四周 口算心算前100練習(xí)冊(cè)做完,高小的20內(nèi)復(fù)習(xí)表測(cè)試 鋼琴復(fù)習(xí)加預(yù)習(xí) ...
    時(shí)光簡記閱讀 149評(píng)論 0 0
  • 星期六,陽光明媚,小姐姐個(gè)和小弟弟約好去公園玩,他們玩著玩著,小弟弟突然看見草坪上飛來一只小蝴蝶,小弟弟...
    愛自己最快樂閱讀 274評(píng)論 0 5

友情鏈接更多精彩內(nèi)容