用python來分割圖片


程序思路:

     此次程序主要是利用PIL(Python Image Libraty)這庫,來進行圖片的處理。PIL是一個功能非常強大的python圖像處理標准庫,但由於PIL只支持python2.7。如今很多python程序員都使用python3.x,所以PIL在之前的基礎上分離出來一個分支,另外創建一個Pillow庫,以便支持python3.x, 本程序在使用之前確保已經安裝了Pillow庫。     

     程序首先把你要分隔的圖像讀取到一個變量中,然后我們定義了一個 fill_image() 方法,用來填充圖像讓原本大小不一的圖像,重新變為一個長寬相同的正方形圖像,方便之后處理。通過 fill_image() 方法,我們就會得到新的一張正方形圖像。隨后我們在利用 cut_image() 方法,把圖像分隔成 9 張,因為微信朋友圈最多發 9張圖片。

 

 1 from PIL import Image
 2 import sys
 3 
 4 #先將 input image 填充為正方形
 5 def fill_image(image):
 6     width, height = image.size
 7     #選取長和寬中較大值作為新圖片的
 8     new_image_length = width if width > height else height
 9     #生成新圖片[白底]
10     new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')   #注意這個函數!
11     #將之前的圖粘貼在新圖上,居中
12     if width > height:#原圖寬大於高,則填充圖片的豎直維度  #(x,y)二元組表示粘貼上圖相對下圖的起始位置,是個坐標點。
13         new_image.paste(image, (0, int((new_image_length - height) / 2)))
14     else:
15         new_image.paste(image, (int((new_image_length - width) / 2),0))
16     return new_image
17 
18 def cut_image(image):
19     width, height = image.size
20     item_width = int(width / 3)  #因為朋友圈一行放3張圖。
21     box_list = []
22     # (left, upper, right, lower)
23     for i in range(0,3):
24         for j in range(0,3):
25             #print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
26             box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
27             box_list.append(box)
28     image_list = [image.crop(box) for box in box_list]
29     return image_list
30 
31 #保存
32 def save_images(image_list):
33     index = 1
34     for image in image_list:
35         image.save(str(index) + '.png', 'PNG')
36         index += 1
37 
38 if __name__ == '__main__':
39     file_path = "2.jpg"  #圖片保存的地址
40     image = Image.open(file_path)
41     #image.show()
42     image_new = fill_image(image)
43     image_list = cut_image(image_new)
44     save_images(image_list)

如果有興趣的話可以看一看Pillow庫的使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM