用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库的使用

 

原文地址:https://www.cnblogs.com/tianqianlan/p/9448852.html