用Python分割九宮格圖片發朋友圈
近日,朋友圈流行起了發九宮格的圖片,就是將一張圖片切割成九張圖,然後在朋友圈發九張,但看起來就像一張一樣,這不,我樓下的小A就狂發了一堆。
看起來好像挺好玩的,於是就問了小A他是怎樣做的,他跟我說要下載一個軟體,然後就這樣那樣操作就可以了。
作為一個有理想(hen)有抱負(lan)的程式設計師,怎麼可能會為了這麼一個小功能就去下載一個軟體,不用的時候還得把他給刪了,於是乎就想到了要不自己寫個程式碼,然後把這個功能放在微信小號上,只要給小號發張圖片,就能將處理好後的圖片返回給你。想想還是挺美好,那麼,說幹就幹。(效果如下)
這樣,集齊九張圖片就可以去發朋友圈了,非開發人員看到這裡就可以加下小A的微訊號,去試試這個技能了,公眾號裡回覆 九宮圖 就能獲取小A的微信名片加好友了。
至於程式設計師們,我們可以詳細來聊聊這個功能開發的思路跟具體程式碼。
本次用到的環境:Win10 or Ubuntu
語言:Pyhton3.6.4
第三方庫:Pillow,itchat
九宮格分割程式碼來源:https://blog.csdn.net/mico_cmm/article/details/81747974
itchat的使用可以參考之前的文章
我們先來看看九宮格分割的思路:
1 首先,你要有一張要發朋友圈的原圖,長寬就看你自己安排了,不過儘量是正方形的效果會好點。
2 根據圖片中最長的那一邊的長度a來生成一個邊長為a的白底正方形,然後將原圖居中放置到邊長為a的白底正方形中央。如下圖所示:我選擇了一張長為800,寬為500的原圖,我們要做的就是生成一個邊長為800的白底正方形,然後將原圖放置到正方形的正中央。
3 就是將圖片九等分,切割成九張圖
4 利用itchat接收使用者傳送過來的圖片,對圖片處理後返回使用者九張處理後的圖片
生成白底正方形:
from PIL import 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') # 注意這個函式! # # 將之前的圖貼上在新圖上,居中 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張圖。
item_height = int(height / 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_height ,( j +1 ) *item_width ,( i +1 ) *item_height)
box_list.append(box)
image_list = [image.crop(box) for box in box_list]
return image_list
儲存圖片:
# 儲存圖片
def save_images(image_list):
index = 1
for image in image_list:
# 在windows下地址需要雙\進行轉義,linux下就直接資料夾地址:/home/image/
image.save('C:\\Users\Administrator\\Desktop\\九宮格\\'+str(index) + '.jpg')
index += 1
# 點選按鈕,實現圖片分割
圖片處理的主函式:
def cTofClicked(image_name):
# 開啟一張新圖片
image =Image.open(image_name)
# 填充圖片
image = fill_image(image)
# 切割圖片
image_list = cut_image(image)
# 儲存圖片
save_images(image_list)
通過Itchat將功能部署在微訊號上:
import itchat
from itchat.content import *
import time
# 註冊資訊類,如果有人發圖片給你,則進入這個函式進行操作
@itchat.msg_register([PICTURE])
def download_files(msg):
# 將接收到的圖片儲存到py所在資料夾內
msg['Text'](msg['FileName'])
# 將圖片傳入到函式中,進行處理
cTofClicked(msg['FileName'])
# 將處理好的檔案一張張按順序傳送給使用者
for i in range(1,10):
time.sleep(1)
ls="C:\\Users\Administrator\\Desktop\\九宮格\\"+str(i)+".jpg"
itchat.send('@[email protected]%s' % ls,toUserName=msg['FromUserName'])
# 如果是在linux環境下,需要新增引數enableCmdQR,將二維碼通過命令列的形式展示出來
# itchat.auto_login(hotReload=True,enableCmdQR=2)
itchat.auto_login(hotReload=True)
itchat.run()
最後,執行上面這些程式碼,掃碼登陸就可以使用了,如果你想24小時都能用的話,最好是有自己的伺服器,然後後臺一直掛著就可以了。
歡迎大家關注我的微信公眾號Python小黑屋
python學習資源/有趣的python文章/python學習筆記