10分钟教你用Python发一个高逼格的朋友圈

简介: 10分钟教你用Python发一个高逼格的朋友圈

01


前言


Hello~各位小伙伴们大家好。现在大家是越来越离不开手机,离不开微信了。每天打开手机的第一或者第二件事就是赶紧打开朋友圈看看有什么好玩的东西。偶尔忍不住了自己也发两条……好了,今天教大家用Python发一个不一样的朋友圈。

效果如下:

微信图片_20220421154138.jpg

看出什么来了吗?没错,我们把一张图片切成了9张,然后利用朋友圈的9宫格显示,得到了挺不错的效果。好了,废话少说,下面开工。


02


环境准备


Python版本:3.6.0

系统平台:Windows 10 X64

IDE:pycharm


相关模块:

PIL模块;

Image模块;

以及一些Python自带的模块。

 

03


PIL库介绍


对于图像识别,大量的工作在于图像的处理,处理效果好,那么才能很好地识别,因此,良好的图像处理是识别的基础。在Python中,有一个优秀的图像处理框架,就是PIL库。由于PIL只支持Python2.7,所以使用Python3的程序猿们又在PIL的基础上分离出来了一个分支,创建了另外一个库Pillow,是可以支持Python3的。


Pillow兼容了PIL的大部分语法,使用起来也非常的简单。Pillow 是 PIL的对Python3支持的另外一个分支,当然他对Python2也兼容,由于PIL安装起来比较烦,而使用pip可以很轻松的安装Pillow:


Python 2.7

PIL: pip install pillow

Python 3

PIL: pip3 install pillow

Image类是PIL中的核心类,你有很多种方式来对它进行初始化,比如从文件中加载一张图像,处理其他形式的图像,或者是从头创造一张图像等。


04


切割图片



上面说了这么多,接下来我们就要用这个PIL库进行图片切割啦。不过先做两点说明:如果是正方形图片,直接切割;如果不是正方形图片,用白色填充成正方形再切割。大体步骤如下:

1、读取图片。

1if __name__ == '__main__':
2    file_path = "F:\\17-个人博客\\Python高逼格朋友圈\\998.jpg"
3    image = Image.open(file_path)

这一步很简单,从文件加载图像,用Image函数的open方法。如果成功,这个函数将返回一个图像对象。

2、填充图片。

1# 先将 input image 填充为正方形
 2def fill_image(image):
 3    width, height = image.size
 4    # 选取长和宽中较大值作为新图片的
 5    new_image_length = width if width > height else height
 6    # 生成新图片[白底]
 7    new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')  # 注意这个函数!
 8    # 将之前的图粘贴在新图上,居中
 9    if width > height:  # 原图宽大于高,则填充图片的竖直维度  #(x,y)二元组表示粘贴上图相对下图的起始位置,是个坐标点。
10        new_image.paste(image, (0, int((new_image_length - height) / 2)))
11    else:
12        new_image.paste(image, (int((new_image_length - width) / 2), 0))
13    return new_image

首先用PIL库下的Image类创建一个正方形新图(边长我们选择原图中长宽较大的那个),将之前的图片粘贴到新图上面。这样,一张图片就算是填充好啦。

3、切割图片。

1# 先将 input image 填充为正方形
 2def cut_image(image):
 3    width, height = image.size
 4    item_width = int(width / 3)  # 因为朋友圈一行放3张图。
 5    box_list = []
 6    # (left, upper, right, lower)
 7    for i in range(0, 3):
 8        for j in range(0, 3):
 9            # print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
10            box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
11            box_list.append(box)
12    image_list = [image.crop(box) for box in box_list]
13    return image_list

然后进行循环切片,首先是在图片上定位好我们box的区域(相当于圈出一块将要切掉的图片),注意区域由一个4元组定义,表示为坐标是 (left, upper, right, lower)。 Python Imaging Library 使用左上角为 (0, 0)的坐标系统。然后添加到box_list中,最后用crop方法将其切下来,保存到image_list中。

4、保存图片。

1# 保存
2def save_images(image_list):
3    index = 1
4    for image in image_list:
5        image.save('F:\\17-个人博客\\Python高逼格朋友圈\\' + str(index) + '.png', 'PNG')
6        index += 1

保存图片简单了,注意你们的保存路径就行。

05


完整代码


1'''''
 2将一张图片填充为正方形后切为9张图
 3Author:微信公众号:程序猿声
 4'''
 5from PIL import Image
 6
 7
 8# 先将 input image 填充为正方形
 9def fill_image(image):
10    width, height = image.size
11    # 选取长和宽中较大值作为新图片的
12    new_image_length = width if width > height else height
13    # 生成新图片[白底]
14    new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')  # 注意这个函数!
15    # 将之前的图粘贴在新图上,居中
16    if width > height:  # 原图宽大于高,则填充图片的竖直维度  #(x,y)二元组表示粘贴上图相对下图的起始位置,是个坐标点。
17        new_image.paste(image, (0, int((new_image_length - height) / 2)))
18    else:
19        new_image.paste(image, (int((new_image_length - width) / 2), 0))
20    return new_image
21
22
23def cut_image(image):
24    width, height = image.size
25    item_width = int(width / 3)  # 因为朋友圈一行放3张图。
26    box_list = []
27    # (left, upper, right, lower)
28    for i in range(0, 3):
29        for j in range(0, 3):
30            # print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
31            box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
32            box_list.append(box)
33    image_list = [image.crop(box) for box in box_list]
34    return image_list
35
36
37# 保存
38def save_images(image_list):
39    index = 1
40    for image in image_list:
41        image.save('F:\\17-个人博客\\Python高逼格朋友圈\\' + str(index) + '.png', 'PNG')
42        index += 1
43
44
45if __name__ == '__main__':
46    file_path = "F:\\17-个人博客\\Python高逼格朋友圈\\998.jpg"
47    image = Image.open(file_path)
48    # image.show()
49    image = fill_image(image)
50    image_list = cut_image(image)
51    save_images(image_list)

注:代码文件获取请移步到留言区。


相关文章
|
8月前
|
程序员 Python
用Python发一个优雅的朋友圈,1行代码搞定
用Python发一个优雅的朋友圈,1行代码搞定
 用Python发一个优雅的朋友圈,1行代码搞定
|
10月前
|
存储 Python
技巧 | Python制作朋友圈炫酷九宫格图片
技巧 | Python制作朋友圈炫酷九宫格图片
|
存储 小程序 计算机视觉
不到100行代码 Python制作一个九宫格图片生成器,炫酷朋友圈!
本文将介绍如何用 Python 将一张图片转化为 9 宫格,并加入 GUI 界面,封装成一个程序,先看一下程序的预览效果:
不到100行代码 Python制作一个九宫格图片生成器,炫酷朋友圈!
|
Python
用Python助女神发朋友圈
爱美是人类的天性,特别是女性。她们不仅喜欢打扮自己,还喜欢晒圈儿分享美好的事物。今天就教大家一个朋友圈晒图利器——切割图片。
117 0
用Python助女神发朋友圈
|
缓存 Python
用Python拼字,实现微信好友头像生成祝福文字,做朋友圈最靓的仔
利用汉字库HZK16文件来实现,拿到点阵信息后,将背景图片当做16*16点阵,用头像图片和空白来替代点阵中的点。这里为了提高字笔画的丰富性,采用一个点对应4个图片。
477 0
用Python拼字,实现微信好友头像生成祝福文字,做朋友圈最靓的仔
|
Python 存储
Python 制作微信全家福,你就是朋友圈最亮的仔!
前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像。本文就教大家用Python来实现这种效果。
1012 0
|
数据采集 JSON 数据可视化
如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化展示
大前天我们通过Python网络爬虫对朋友圈的数据进行了抓取,感兴趣的朋友可以点击进行查看,如何利用Python网络爬虫抓取微信朋友圈的动态(上)和如何利用Python网络爬虫爬取微信朋友圈动态——附代码(下)。
1634 0
|
4天前
|
存储 索引 Python
元组(Tuple)在Python编程中的应用与实例
元组(Tuple)在Python编程中的应用与实例
15 2
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python编程的深入探索与实用案例
Python编程的深入探索与实用案例
14 3
|
14天前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
41 1