Python将图片处理为九宫格 不只是九宫格哦

时间:2022-07-23
本文章向大家介绍Python将图片处理为九宫格 不只是九宫格哦,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

九宫格图

概述

这两天在朋友圈又看到朋友在发九宫格类的图片,于是今天上网查了一下,发现网上这类应用很多,而且有的软件已经把这个功能集成。本部分主要是讲一下自己在九宫格图上的一些其他操作,使得九宫格图有了其他骚操作

项目论述

整个实现过程大致分两部分:图片转为九宫格、多元素拼接到同一个底片上。

1.图片转为九宫格

在这一部分网上代码很多很多,随便找一个稍微改改就好。它一般就是利用Pillow库实现。具体可以分为以下几部分。

(1)读取到原图片,获取图片尺寸后,将宽高对比,生成以白色为背景的大正方形图

(2)将大正方形图按照 3*3 比例进行切割,生成9个小正方形图

(3)分别生成 9 张小正方形图片并存储

2.图片拼接在一起

在这里主要是通过PIL在预先设置好的背景图中贴上自己想要添加的内容,难在于确定像素位置。本功能利用了微信显示长图时只显示中间部分的操作。

项目实现

1.准备各种素材

素材需求如下:白色长图、准备的待转九宫格图片、另外一些想要添加进去的图片元素。

2.图片转九宫格

(1)考虑到用户发送的图片不一定是一个方形的,因此首先需要对图片转成方形的。代码如下。

# 将图片填充为正方形
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

效果图如下。

(2)对大正方形进行切割,横纵两层循环,切割结果存储在列表。

(3)存储切割结果到本地

3图片拼接

这里采用把元素贴在一个底片上的方式实现。借鉴了网上的一些东西:例如加一些广告语(当然你也可以把他改成祝福语,看你想干啥了) ,把内容存储到字典里。接着通过对图片的缩放,像素位置的定位等一些列操作,将固定元素添加到固定位置,进而实现一个比较有趣的功能(网上把他做成了抽奖)。

朋友圈发送效果如下。

项目效果

整个项目的效果就是把图片分割成九份并创建新的九宫格长图。