pythonpython思科DevNet

用Python发一个高逼格的朋友圈【附代码】

2018-08-21  本文已影响2425人  六月雨June

前阵子在网上看到这个有趣的教程,马上就来实践学习一下,并提供给有需要的朋友学习。

昨晚就敲了代码并且发了朋友圈实验了一下,用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菜鸟到全栈工程师的蜕变。

上一篇 下一篇

猜你喜欢

热点阅读