前阵子在网上看到这个有趣的教程,马上就来实践学习一下,并提供给有需要的朋友学习。
昨晚就敲了代码并且发了朋友圈实验了一下,用Candice女神镇楼,效果如下:
效果还不错吧?接下来马上操作一下。
安装PIL库
在cmd命令行模式下,输入命令:pip install pillow 即可。(前提是先要把python程序安装好)
这里有个坑要注意:需要先找到python安装目录下的pip包,然后再执行命令,否则会报错无法执行。执行的目录位置如下:
PIL是一个功能非常强大的Python图像处理标准库,但是呢由于PIL支持Python2.7,所以使用Python3的程序员又在PIL的基础上分离出来了一个分支,创建了另外一个库Pillow,是可以支持Python3的。
Pillow兼容了PIL的大部分语法,使用起来也非常的简单。
代码思路
接下来先简单介绍整体思路:
核心代码
完整的代码如下:
# coding: utf-8
# Author: Mingjun Lei
from PIL import Image
# 先将 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')
# 将之前的图片input image 粘贴在新图上,居中
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):
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 boxin 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 ="1.jpg" # 把目标图片 input image 放到代码所处的文件夹里
image = Image.open(file_path)
image = fill_image(image)
image_list = cut_image(image)
save_images(image_list)
读更多的好书,拍更美的照片,写更酷的代码,遇见更有趣的人,愿望是实现从IT菜鸟到全栈工程师的蜕变。