程序猿声

你与千万程序猿在一起

01

前言

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

效果如下:

看出什么来了吗?没错,我们把一张图片切成了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)

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

— 【 THE END 】—

长按下方图片

识别二维码 关注程序猿声

MORE | 来都来了,不如点个赞留个言再走吧↓↓↓

python发朋友圈_10分钟教你用Python发一个高逼格的朋友圈相关推荐

  1. python实现离线翻译_10分钟教你用Python实现微信翻译机器人

    相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思. 今天,利用Python爬虫等知识,教大家打造一个微信下的翻译小助手.好吧,开始干活. 先来看看 ...

  2. python写动态壁纸_10分钟教你用python更换电脑壁纸

    注:本文转载自公众号:木白瞎说 大家好,非常抱歉因为作者懒癌晚期好久没更新(也实在是没写什么值得分享的东西),今天就来诈尸一下(●'◡'●) 今天也没有表情包当引子了,因为做图真的好麻烦啊orz(你说 ...

  3. python经纬度 县信息_10分钟教你用Python获取百度地图各点的经纬度信息

    前言 Python确实是个好东西,可以用来解决很多数据上的烦恼.结合现在各个平台提供的API,可以用Python做很多有用的需求哦~ 需求分析 之前写论文的时候,就有这个需求了.就是抓取百度地图上某些 ...

  4. python飞机游戏视频教程_10分钟教你用Python做个打飞机小游戏超详细教程

    01 前言 这次还是用python的pygame库来做的游戏.关于这个库的内容,读者可以上网了解一下.本文只讲解用到的知识.代码参考自网上,自己也做了一点代码简化.尽量把最核心的方面用最简单的方式呈现 ...

  5. python发朋友圈_用 Python 发一个高逼格的朋友圈

    原标题:用 Python 发一个高逼格的朋友圈 源 /痴海文 /痴海 分享一个非常骚气的发朋友圈姿势.效果如下. 利用今天教给大家的 python 脚本,把一张图重新分隔成 9 张.上传到朋友圈,最后 ...

  6. 用 Python 发一个高逼格的朋友圈

    源 / 痴海  文 / 痴海 分享一个非常骚气的发朋友圈姿势.效果如下. 利用今天教给大家的 python 脚本,把一张图重新分隔成 9 张.上传到朋友圈,最后就会形成上面的效果.可能有些人在朋友圈有 ...

  7. python朋友圈图片_用Python发一个高逼格的朋友圈

    原标题:用Python发一个高逼格的朋友圈 今天要给大家介绍一个Python库:PIL(Python Image Library) 下面我们用一个实际的例子,看看50行python代码可以做什么神奇的 ...

  8. python实现淘宝自动回复_10分钟教你用Python实现微信自动回复功能

    01 前言&&效果展示 相信大家都有忙碌的时候,不可能一直守在微信上及时回复消息.但微信又不能像QQ一样设置自动回复.无妨,今天,我们就来用Python实现微信的自动回复功能吧,并且把 ...

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

    如题,此文转自知乎: 公众号:[大数据前沿]编程,教程,大数据  作者:二胖 今天作者给大家介绍一个Python库: PIL(Python Image Library) 下面我们用一个实际的例子,看看 ...

最新文章

  1. 新建并保存一个空的Excel
  2. Matlab R2010a 32bit 绿色免安装版
  3. Elasticsearch 模糊搜索
  4. 安装m2eclipse插件
  5. Java 进阶基础知识
  6. 牛逼哄哄的 RabbitMQ 到底有啥用?
  7. Extjs 屏蔽F5
  8. 模板template基础学习
  9. PS制作搞笑印章 - 仿真印章 - 水印滤色
  10. 简单好用的js 压缩工具
  11. matlab屏保弹球,连续时间下的弹球建模
  12. 数据库(Mysql)的事物详解
  13. IP地址测试用例编写
  14. RR报文解析(三)利用LSR, DLSR计算RTT
  15. linux操作系统未正常启动提示Entering emergency mode. Exit the shell to continue
  16. 控制工程中的数学建模(3)——自动控制系统的一般模型
  17. 信息系统项目管理师是哪个部门发证?
  18. 剖析腾讯知文,智能问答机器人路在何方
  19. 火鸟程序_火鸟网络管理
  20. 【数学建模笔记 20】数学建模的偏微分方程的数值解

热门文章

  1. 为什么你的拼多多店铺会被降权了
  2. springboot毕设项目高校课程知识库系统hd2m4(java+VUE+Mybatis+Maven+Mysql)
  3. 记第一次完成-jsp小项目-jsp商城+源码
  4. android平板 跑分软件,新人看过来 安卓平板装机必备软件推荐
  5. 三菱fx1n使用st语言rs指令通过485-bd模块与台达变频器进行通信
  6. 三菱FX1N PLC 485与三菱变频器modbus通讯 对变频器进行频率设定,加减速时间设置,正反转,启停控制
  7. vs 开发 qt 遇到 无法找到 Visual Studio 2010 的生成工具(平台工具集 =“v100”) 解决方案
  8. 元旦假期,回到村里,生活不易!
  9. Rust学习笔记之非常好用的包管理器Cargo
  10. 3.21第四周作业 设备选型