前陣子在網上看到這個有趣的教程,馬上就來實踐學習一下,并提供給有需要的朋友學習。
昨晚就敲了代碼并且發了朋友圈實驗了一下,用Candice女神鎮樓,效果如下:
效果還不錯吧?接下來馬上操作一下。
安裝PIL庫
在cmd命令行模式下,輸入命令:pip install pillow? 即可。(前提是先要把python程序安裝好)
這里有個坑要注意:需要先找到python安裝目錄下的pip包,然后再執行命令,否則會報錯無法執行。執行的目錄位置如下:
PIL是一個功能非常強大的Python圖像處理標準庫,但是呢由于PIL支持Python2.7,所以使用Python3的程序員又在PIL的基礎上分離出來了一個分支,創建了另外一個庫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)二元組表示粘貼上圖相對下圖的起始位置,是個坐標點。
? ? ? ? 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"? ? # 把目標圖片 input image 放到代碼所處的文件夾里
? ? image = Image.open(file_path)
????image = fill_image(image)
????image_list = cut_image(image)
????save_images(image_list)
讀更多的好書,拍更美的照片,寫更酷的代碼,遇見更有趣的人,愿望是實現從IT菜鳥到全棧工程師的蛻變。