前陣子在網(wǎng)上看到這個有趣的教程,馬上就來實(shí)踐學(xué)習(xí)一下肾胯,并提供給有需要的朋友學(xué)習(xí)竖席。
昨晚就敲了代碼并且發(fā)了朋友圈實(shí)驗了一下,用Candice女神鎮(zhèn)樓敬肚,效果如下:
效果還不錯吧怕敬?接下來馬上操作一下。
安裝PIL庫
在cmd命令行模式下帘皿,輸入命令:pip install pillow? 即可东跪。(前提是先要把python程序安裝好)
這里有個坑要注意:需要先找到python安裝目錄下的pip包,然后再執(zhí)行命令,否則會報錯無法執(zhí)行虽填。執(zhí)行的目錄位置如下:
PIL是一個功能非常強(qiáng)大的Python圖像處理標(biāo)準(zhǔn)庫丁恭,但是呢由于PIL支持Python2.7,所以使用Python3的程序員又在PIL的基礎(chǔ)上分離出來了一個分支斋日,創(chuàng)建了另外一個庫Pillow牲览,是可以支持Python3的。
Pillow兼容了PIL的大部分語法恶守,使用起來也非常的簡單第献。
代碼思路
接下來先簡單介紹整體思路:
核心代碼
完整的代碼如下:
# coding: utf-8
# Author: Mingjun Lei
from PIL import Image
# 先將 input image 填充為正方形
def fill_image(image):
????width, height = image.size
????# 選取長和寬中較大值作為新圖片的邊長
? ? new_image_length = width if width > height else height
????# 生成新圖片[白底],底色可配置其他顏色
? ? new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')
????# 將之前的圖片input image 粘貼在新圖上兔港,居中
? ? if width > height:# 原圖寬大于高庸毫,則填充圖片的豎直維度? #(x,y)二元組表示粘貼上圖相對下圖的起始位置,是個坐標(biāo)點(diǎn)。
? ? ? ? new_image.paste(image, (0, int((new_image_length - height) /2)))
????else:
????????new_image.paste(image, (int((new_image_length - width) /2), 0))
????return new_image
def cut_image(image):
????width, height = image.size
????item_width =int(width /3)# 因為朋友圈一行放3張圖
? ? box_list = []
????# (left, upper, right, lower)
? ? for i in range(0, 3):
????????for j in range(0, 3):
? ? ? ? ? ? box = (j*item_width, i*item_width, (j+1)*item_width, (i+1)*item_width)
????????????box_list.append(box)
????????image_list = [image.crop(box)for boxin box_list]
????????return image_list
# 保存
def save_images(image_list):
????index =1
? ? for image in image_list:
????????image.save(str(index) +'.png', 'PNG')
????????index +=1
if __name__ =='__main__':
????file_path ="1.jpg"? ? # 把目標(biāo)圖片 input image 放到代碼所處的文件夾里
? ? image = Image.open(file_path)
????image = fill_image(image)
????image_list = cut_image(image)
????save_images(image_list)
讀更多的好書衫樊,拍更美的照片飒赃,寫更酷的代碼,遇見更有趣的人科侈,愿望是實(shí)現(xiàn)從IT菜鳥到全棧工程師的蛻變载佳。