程序思路:
此次程序主要是利用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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
from PIL import Image import sys #先将 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' ) #注意这个函数! #将之前的图粘贴在新图上,居中 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 ): #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) 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: image.save( str (index) + '.png' , 'PNG' ) index + = 1 if __name__ = = '__main__' : file_path = "2.jpg" #图片保存的地址 image = Image. open (file_path) #image.show() image_new = fill_image(image) image_list = cut_image(image_new) save_images(image_list) |
如果有兴趣的话可以看一看Pillow库的使用
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/tianqianlan/p/9448852.html