程序思路:
此次程序主要是利用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