微信朋友圈中很多玩家都对那种9宫格拼图的动态情有独钟,一般都会使用到图片处理软件来处理拼图。今天试试从网上看到的Python代码来实现此功能。
安装PIL包
Import PIL包中的Image模块
PIL 的主要功能定义在 Image 类当中,而 Image 类定义在同名的 Image 模块当中。使用 PIL 的功能,一般都是从新建一个 Image 类的实例开始。新建 Image 类的实例有多种方法。你可以用 Image 模块的 open() 函数打开已有的图片档案,也可以处理其它的实例,或者从零开始构建一个实例。
from PIL import Image
sourceFileName = "source.png"
avatar = Image.open(sourceFileName)
上述代码引入了 Image 模块,并以 open() 方法打开了 source.png 这个图像,构建了名为 avatar 的实例。如果打开失败,则会抛出 IOError 异常.
将要分隔的图像读取到一个变量中,然后定义一个 fill_image() 方法,用来填充图像让原本大小不一的图像,重新变为一个长宽相同的正方形图像。
利用 cut_image() 方法,把图像分隔成 9 张,因为微信朋友圈最多发 9 张图片。
将生成的图片发送朋友圈。
其中 fill_image()方法会用到的关键代码为:
#生成新图片[白底]
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)))
Image.new
PIL.Image.new(mode, size, color=0)
Creates a new image with the given mode and size.
创建一个指定 mode和size的新image对象。
Image.paste
Image.paste(im, box=None, mask=None)
将其它的image 拷贝到当前的这个image中
cut_image()用到的关键代码为:
image_list = [image.crop(box)
image.crop
Image.crop(box=None)
从该图像返回一个矩形区域。该框是一个4元组, 定义左、上、右和下像素坐标。
save_image()用到的关键代码为:
image.save(str(index) + '.png', 'PNG')
image.save
Image.save(fp, format=None, **params)
将此图像保存在给定文件名下。如果没有指定格式, 则要使用的格式将从文件扩展名 (如果可能的话) 确定。
经过以上几步,你就可以构建你的九宫格妥妥的发朋友圈啦~~~
具体代码详见:https://gitee.com/ccsensei/jiugongge.git
当然也有另一个思路来构建九宫格,就是选9张不同的图片来组成,之前写过一篇(改成3*3的就okay),有兴趣的小伙伴可以参看:
[花好月圆夜,PIL拼图时]https://www.jianshu.com/p/3eac9b070976
参考:http://pillow.readthedocs.io/en/3.1.x/handbook/concepts.html#concept-modes