五步做出九宫格图片(Python3版)

2018-08-12  本文已影响519人  CC先生之简书

微信朋友圈中很多玩家都对那种9宫格拼图的动态情有独钟,一般都会使用到图片处理软件来处理拼图。今天试试从网上看到的Python代码来实现此功能。

  1. 安装PIL包

  2. 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 异常.

  1. 将要分隔的图像读取到一个变量中,然后定义一个 fill_image() 方法,用来填充图像让原本大小不一的图像,重新变为一个长宽相同的正方形图像。

  2. 利用 cut_image() 方法,把图像分隔成 9 张,因为微信朋友圈最多发 9 张图片。

  3. 将生成的图片发送朋友圈。

其中 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

上一篇下一篇

猜你喜欢

热点阅读