【带你成为pyq最靓的仔】朋友圈九宫格(一)之图片切割篇

简介: 既然能够对图片进行九宫格化操作,那么视频是不是也可以呢?答案是肯定的,关于对视频进行九宫格化的操作我将在本系列推文的第二篇进行讲解

前言


这是一篇"蓄谋已久"的文章,为什么这么说呢?


记得那时我刚从健身房出来,当我在公交车站台等车的时候,无聊刷起了朋友圈,看到朋友圈里有好友在发九宫格的动态,就觉得好洋气呀,于是我就萌生了一个罪恶的想法,能不能借助Python帮我自动处理一下图片呢,毕竟我手残,搞不了这么精细的活,对吧,于是就诞生了这篇分享文章;


既然能够对图片进行九宫格化操作,那么视频是不是也可以呢?答案是肯定的,关于对视频进行九宫格化的操作我将在本系列推文的第二篇进行讲解(文章末尾我放了一个九宫格视频的demo,小伙伴们可以先看看)


朋友圈九宫格图片技术详解


首先,我们来看看我当时在朋友圈里看到的这条动态:


微信图片_20220611015319.png


我们知道,朋友圈一次最多可以分享9张图片,因此我们只需要将一张完整的图片按照合适的尺寸切割成9张小图,然后按照原图的顺序对其进行拖拽拼接即可。接下来,我将以我个人的证件照为例,来为大家完整的演示这个案例。


在此之前,我们先来介绍一下完成此案例所需要掌握的一些知识。



01 - 相关API介绍


  • PIL.Image.open(fp,mode='r')


微信图片_20220611015324.png


  • PIL.Image.new(mode,size,color=0)


微信图片_20220611015340.png

  • Image.paste(im,box=None,mask=None)


微信图片_20220611015344.png

  • Image.crop(box=None)


微信图片_20220611015348.png


  • Image.save(fp,format=None,**params)


微信图片_20220611015351.png



02 - 思路分析及部分代码展示


我们可以将总体思路概括为以下三大步骤:


  1. 输入想要发朋友圈的图片;
  2. 通过代码进行切割并将切割好的图片进行保存
  3. 朋友圈


有了思路之后,我们来详细讲解一下每一步所对应的细节:


首先我们来对用户输入的图片进行预处理,即对图片进行正方形化添加白色背景两个操作,代码如下:


# 1.将长宽不等的图片进行正方形化的处理;2.对所有输入的图片进行添加白色背景的操作
def fill_image_to_square(img):
    # 获取输入图片的大小尺寸
    width, height = img.size
    # 若所输入图片大小尺寸不等,则将长宽中较大者作为新图片的大小
    new_image_length = width if width > height else height
    # 生成一个白色背景的图片,大小尺寸为用户所输入图片长宽尺寸的较大者
    new_image = Image.new(img.mode, (new_image_length, new_image_length), color='white')
    # 将用户所输入的图片粘贴在白色背景的正中央
    if width > height:
        new_image.paste(img, (0, int((new_image_length - height) / 2)))
    else:
        new_image.paste(img, (int((new_image_length - width) / 2), 0))
    return new_image


其次,我们来对已经预处理好的图片进行切割操作,为了方便小伙伴们理解切割图片的具体细节,请看下图:


微信图片_20220611015355.png


我们对所输入的图片建立二维坐标系,图片切割的顺序即为图中所示的数字顺序,切割功能部分的实现代码如下所示:


def cut_image(img):
    width, height = img.size
    # 一行放3张图
    item_width = int(width / 3)
    box_list = []
    # (left, upper, right, lower)
    for i in range(0, 3):
        for j in range(0, 3):
            print(j*item_width, i*item_width, (j+1)*item_width, (i+1)*item_width)
            box = (j*item_width, i*item_width, (j+1)*item_width, (i+1)*item_width)
            box_list.append(box)
    img_list = [img.crop(box) for box in box_list]
    return img_list

最后,将我们输入的图片切割完成之后,我们只需要将其保存在本地即可,如下所示:


微信图片_20220611015400.png


接着我们再来看看保存功能部分的代码实现:


def save_cropped_image(img_list):
    index = 1
    for img in img_list:
        # 保存到当前目录的dong_wechat文件夹下且图片格式为png
        img.save("dong_wechat/"+str(index) + '.png', 'PNG')
        index += 1


写完了所有的功能实现之后,我们来看一下发出来的朋友圈长什么样子:


微信图片_20220611015405.png

哈哈哈,不错,毕竟我花瓶的称号不是浪得虚名的,大功告成!


写在最后


在上述文章中我们详细介绍了如何将一张图片切割成9部分,并将其发布在朋友圈中,小伙伴们学会了吗,快去实现一下吧!

相关文章
|
3月前
自适应可爱卡通小人404页面模板
自适应可爱卡通小人404页面模板
53 12
自适应可爱卡通小人404页面模板
|
6天前
PPT 动画-制作一个倒酒
PPT 动画-制作一个倒酒
8 2
|
2月前
|
前端开发 小程序 API
技术心得记录:小程序—九宫格心形拼图
技术心得记录:小程序—九宫格心形拼图
11 0
|
3月前
|
JavaScript
|
3月前
|
开发者
如何在游戏中实现一个好看的金币效果
如何在游戏中实现一个好看的金币效果
51 1
|
计算机视觉 Python
【每周一坑】生成九宫格图片
非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。
|
Python
送给小公主的一首诗——闪光屏幕书写(Python实现)
送给小公主的一首诗——闪光屏幕书写(Python实现)
|
小程序 开发者
如何实现一个好看的金币效果
如图,是我最新上线的游戏【彩虹星球大冒险】中的金币拾取效果,打金币作为这个游戏中的一个非常重要的体验,把金币拾取效果做的好看就显得尤为重要。今天就跟大家分享一个,如何实现一个这样好看的金币拾取效果。 观察一下上面的动图,金币从出现到消失总共是分为两个过程的。 金币从爆炸的物体中向上弹出,并进行旋转下落 玩家碰到金币后,金币放大旋转然后飞到屏幕的左上角记录金币的位置后消失 接下来我们以一个具体的实例,来逐步的实现整个金币效果。
193 0
如何实现一个好看的金币效果
儿童节教大家做一个C#图片匹配小游戏
儿童节教大家做一个C#图片匹配小游戏
140 0
儿童节教大家做一个C#图片匹配小游戏
|
Python Windows
【花式表白之动态二维码】,这个gif有点帅哦
【花式表白之动态二维码】,这个gif有点帅哦