用Python助女神發(fā)朋友圈

文 |?閑歡
來(lái)源:Python 技術(shù)「ID: pythonall」

愛(ài)美是人類(lèi)的天性,特別是女性。她們不僅喜歡打扮自己,還喜歡曬圈兒分享美好的事物。今天就教大家一個(gè)朋友圈曬圖利器——切割圖片。
目標(biāo)需求
我們要做的就是將一張完整的圖片分割成9張小圖片,制作成朋友圈九宮格的圖片,從而在朋友圈曬出不一樣的美景。
最終實(shí)現(xiàn)的效果對(duì)比如下:

對(duì)比兩個(gè)朋友圈,后面的九宮格逼格提升了一個(gè)數(shù)量級(jí)有木有!
實(shí)現(xiàn)原理
為了實(shí)現(xiàn)九宮格,我們需要將圖片轉(zhuǎn)換成正方形,這樣切割之后效果最好。轉(zhuǎn)換的方法是先創(chuàng)建一個(gè)正方形的圖片,然后將原圖居中貼在新圖片上。
接著,我們針對(duì)新圖片的尺寸,計(jì)算切割之后每張小圖片的尺寸,然后將每張小圖片的四個(gè)角的坐標(biāo)計(jì)算出來(lái),最后就根據(jù)這些坐標(biāo)切割圖片就行。
這里我們主要用到 PIL 庫(kù)的 image 模塊,也是我們處理圖片經(jīng)常用到的庫(kù),安裝這里就不介紹了。
實(shí)現(xiàn)代碼
下面我們來(lái)看看實(shí)現(xiàn)代碼:
from PIL import Image# 先將image填充為正方形def fill_image(img):width, height = img.size# 選取長(zhǎng)和寬中較大值作為新圖片的new_image_length = width if width > height else height# 生成新圖片[白底]new_image = Image.new(img.mode, (new_image_length, new_image_length), color='white')# 將之前的圖粘貼在新圖上,居中if width > height:# 原圖寬大于高,則填充圖片的豎直維度# #(x,y)二元組表示粘貼上圖相對(duì)下圖的起始位置,是個(gè)坐標(biāo)點(diǎn)new_image.paste(img, (0, int((new_image_length - height) / 2)))else:new_image.paste(img, (int((new_image_length - width) / 2), 0))return new_imagedef cut_image(img):width, height = img.size# 一行放3張圖item_width = int(width / 3)box_list = []# (left, upper, right, lower)for i in range(0, 3):for j in range(0, 3):print((i*item_width, j*item_width, (i+1)*item_width, (j+1)*item_width))box = (j*item_width, i*item_width, (j+1)*item_width, (i+1)*item_width)box_list.append(box)img_list = [img.crop(box) for box in box_list]return img_listdef save_images(img_list):index = 1for img in img_list:img.save("./"+str(index) + '.png', 'PNG')index += 1if __name__ == '__main__':image = Image.open('./mv.jpg')image.show()image = fill_image(image)image_list = cut_image(image)save_images(image_list)
我們的代碼主要分為三個(gè)部分:轉(zhuǎn)換圖片、切割圖片和保存圖片。對(duì)應(yīng)的就是上面的實(shí)現(xiàn)步驟。
最后,我們用一張美女圖片來(lái)看看實(shí)現(xiàn)效果。首先,我們來(lái)欣賞一下這位美女:

運(yùn)行代碼之后的小圖片如下(由于圖片太多,所以我直接拼裝成了朋友圈的樣式):

為了保證最佳效果,處理前的圖片盡量接近正方形哦!
昨天我運(yùn)用這段代碼,幫女神處理一張圖片,她心滿(mǎn)意足地曬了一把朋友圈,晚上還給我一個(gè)大大地吻,我紅著臉裝 X:小意思啦!
一段代碼可以俘獲一顆心,讓她開(kāi)心和滿(mǎn)足,我看著那長(zhǎng)滿(mǎn)繭的指頭,心里默默的告訴自己:值了!
總結(jié)
看完這個(gè),還不趕緊去試試?不一定是女神圖片,也可以切割其他的圖片呢!大家如果覺(jué)得喜歡,點(diǎn)個(gè)“在看”分享給更多的朋友吧!
PS:公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計(jì)劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺(jué)文章內(nèi)容不錯(cuò)的話(huà),記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
識(shí)別文末二維碼,回復(fù):200728