python训练营朋友圈留言_用Python发一个高逼格的朋友圈【附代码】

今天二胖要给大家介绍一个Python库:

PIL(Python Image Library)

下面我们用一个实际的例子

看看50行python代码可以做什么神奇的事情

这是二胖发的一个朋友圈

切图前是一张图

切图后就是九张图啦

成功霸屏

除了可以处理规整的正方形图片

还可以处理非规则的图片

比如下面这张宽度远大于高度的图片

二胖是怎么处理的呢?

很简单

取宽和高之间的较大值

然后填充白色

就可以构造出一张正方形的图片啦

当然,想把一张图片做成这样子也很容易啦,现在很多手机上的图片处理软件都能实现。

二胖举这个例子只是为了给大家介绍介绍PIL库,感兴趣的童鞋也可以练习练习编程嘛~

好了,现在就来看看这个PIL库到底是个什么吧~

PIL是一个功能非常强大的Python图像处理标准库,但是呢,由于PIL支持Python2.7,所以使用Python3的程序猿们又在PIL的基础上分离出来了一个分支,创建了另外一个库Pillow,是可以支持Python3的。

Pillow兼容了PIL的大部分语法,使用起来也非常的简单。

下面二胖就讲讲是如何使用PIL库实现了上文介绍的小程序。

其实思路很简单:

对应代码如下:

# -*- coding: utf-8 -*-

'''将一张图片填充为正方形后切为9张图Author:微信公众号:大数据前沿'''

from PIL import Image

import sys

#将图片填充为正方形

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

#切图

def cut_image(image):

width, height = image.size

item_width = int(width / 3)

box_list = []

# (left, upper, right, lower) for i in range(0,3):#两重循环,生成9张图片基于原图的位置 for j in range(0,3):

#print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))

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 box in box_list]

return image_list

#保存

def save_images(image_list):

index = 1

for image in image_list:

image.save('./result/python'+str(index) + '.png', 'PNG')

index += 1

if __name__ == '__main__':

file_path = "python.jpeg"

image = Image.open(file_path)

#image.show()

image = fill_image(image)

image_list = cut_image(image)

save_images(image_list)

相信大家看了代码就知道是怎么实现的了吧,代码中可能比较难理解的地方二胖也给出了相应的注释,大家赶快把代码下载下来拿去跑一跑。

github地址:

除了切图外,PIL还能做很多其他好玩的事情,二胖把中文文档下载下来啦!

需要的朋友,请关注公众号:逆袭的二胖,后台回复【pil】就可以拿到啦。

另外,关于编程,二胖有话要说,给大家推荐一篇我写的万赞文章,记录了我学习编程过程中积累的一些经验:二胖:这可能是我见过最好的编程指南了!​zhuanlan.zhihu.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim 编辑器的快捷键

文章目录命令终端界面滚屏命令终端页签切换缓存区切换/文件切换分割窗口/打开新窗口切换窗口移动/旋转/移出窗口关闭窗口调整窗口大小底行命令模式下的编辑快捷键vim 很多指令或者快捷键是大小写敏感。命令终端界面滚屏 快捷键说明Fn ←向上滚屏到开始处Fn →向下滚屏到末尾…

关于二叉堆(优先队列)的其他操作及其应用

【0】README 0.1)本文总结于 数据结构与算法分析;源代码均为原创, 旨在了解到我们学习了优先队列后,还能干些什么东西出来, 增加学习的interest; 0.2)以下列出了 关于二叉堆(优先队…

gradle junit5_JUnit 5和Selenium –使用Gradle,JUnit 5和Jupiter Selenium设置项目

gradle junit5Selenium是一组支持浏览器自动化的工具和库,主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver,它提供客户端库,JSON有线协议(与浏览器驱动程序进行通信的协议)和浏览器驱动程序。 Sele…

ubuntu 两块硬盘挂载不上_win10 轉 Ubuntu

目前用了win10兩三年。發現越來越慢,況且已習慣mac OS,所以想用自己的機子來裝個雙系統Linux,慢慢的將win的東西都轉到Ubuntu上。已清空一個磁盤300G,打算就是在這300G裡裝一個Ubuntu,不知道是否夠用(雖然很想裝在三星…

包+类导入+静态导入+类放入包中+包作用域

【0】README 0.1)本文转自 core java volume 1, 旨在理清 包和类导入的相关知识; 【1】 包 1.1) java 允许使用包将类组织起来,包可以方便组织代码,并将自己的代码与别人提供的代码库分开管理&#xff1b…

selenium自动化测试_使用Selenium自动化测试处理多个浏览器选项卡

selenium自动化测试使用Selenium进行自动化测试一直是将萌芽的自动化测试人员培养为专业人员的生命线。 Selenium是开源的,在全球范围内被广泛采用。 结果,您会得到社区的大力支持。 提供了与Selenium绑定的不同语言的多种框架。 因此,您已经…

qt和c#怎么选_请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?

回答问题之前,先装个逼——没有主导过生命周期三年以上的桌面软件项目的,闭嘴。你连一个桌面软件项目的生命周期都没经历过,你凭什么做技术选型?凭信仰吗?装逼结束,正文开始。首先,非主流技术和…

java 白皮书的关键术语

【0】README 0.1) 本文转自 core java volume 1,仅供了解,所谓爱屋及乌嘛; 0.2) java的设计者编写了颇有影响力的白皮书,用来解释设计的初衷以及完成的情况,并发布了一个摘要;【1】…

当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...

高中数学必修1 第一章 集合 分节练习和章末综合测试题含答案1 集合的含义与表示1、下列各组对象能否组成一个集合?(1)接近于0的数的全体; (2)2的近似值的全体; (3)平面上到点O 的距离等于1的点的全体; (4)正三角形的全体&#xff…

spring jpa 流式_从响应式Spring Data存储库流式传输实时更新

spring jpa 流式这篇文章详细介绍了从数据库到对该数据感兴趣的任何其他组件进行流更新的幼稚实现。 更准确地说,如何更改Spring Data R2DBC存储库以向相关订阅者发出事件。 对R2DBC和Spring的一点背景知识将对这篇文章有所帮助。 我以前的著作《 使用 Microsoft S…

弹窗页面交互_UI进阶知识-信息提交类弹窗该如何设计?

原文作者:风筝KK 信息提交类弹窗大家应该都比较熟悉,和其他弹窗的区别在于他有输入、选择等操作,比如我们常见的输入验证码、留言回复、充值转账、任务设置等。看上去设计都比较简单,但是当你验收时就会发现问题,为什么…

selenium并行_如何在不同的浏览器中设置Selenium网格以并行执行

selenium并行到目前为止,Selenium是最常用的Web自动化测试工具。 如此受欢迎的原因之一是Selenium的自动跨浏览器测试功能。 Selenium自动化测试可以帮助您在所有主要浏览器,所有主要操作系统甚至移动设备浏览器上进行测试。 您可以在所有功能测试中获得…

java 发展简史

【0】README 0.1) 本文转自 core java volume 1,仅供了解Java 的发展历史,它的前世今生,所谓知己知彼,百战不殆(just a joke) ; 【1】java 发展简史 1.1)java的历史要…

axios代理跨域 cli4_跨域本质及解决办法

1、什么是跨域?2、如何解决?跨域是前端所独有的,后端不存在跨域问题。是浏览器的一种安全保护手段,为了防止别人抓取、篡改你的网站数据信息。遵循同源策略、同协议(http)、同域名、同端口,少一…

如何使用eclemma插件_如何集成和使用EclEmma插件来获得良好的Junit覆盖率

如何使用eclemma插件你好朋友, 如果编写好的代码很重要,那么编写覆盖所有业务逻辑的优良Junit测试用例也同样重要。通过编写覆盖业务逻辑的Junit测试用例,我们实际上确保代码的每种方法都能正常工作按照预期进行,因此减少了在软…

Java 相关术语

【0】README 0.1) 本文转自 core java volume 1,仅供了解Java 的相关术语,包括像JDK、JRE等 ;而且我感觉,了解了这些过后,你会更懂 Java, 更热爱它; 【2】Java术语 2.1)…

一般试卷的纸张大小是多少_pdf试卷怎么打印在A3纸上

一般的PDF试卷的纸张大小都是A4大小,没有现成A3大小Word文档的试卷时,需要将PDF试卷转换Word文档之后进行排版,如何实现这一操作呢?请接着往下学习吧~一、将试卷的PDF格式转换为Word1.进入PDF快转官网,点击下载按钮下载…

设置 JDK环境变量(Windows)

【0】README 0.1) 本文转自 core java volume 1,旨在说明如何设置 JDK环境变量,以及为什么要设置的问题;【1】JDK目录树 Attention)就Java 而言, docs 和 src 是两个最有用的子目录:因为 docs …

光流法测试代码_高效的企业测试-工作流和代码质量(4/6)

光流法测试代码本文的这一部分将讨论在开发过程中拥有有效工作流程的影响,以及适当的测试代码质量如何使我们能够创建可维护的测试,尤其是对于复杂项目。 开发工作流程和管道 编程是一项流程活动,我们开发人员应该对保持工作流程高效和缩短…

水泵怎么做_泳池设备日常怎么维护和保养?

点击上方“蓝字”,关注我们.●电机突然停止运转怎么办?1.检查电路和电线接口等。2.检查输送到电机的电压是否过低(通常由于电源线太小而引致的电流不足)。3.检查是否有过载而引起电流过大。注:Hayward 水泵的单相电机有自动过热保护装置。该装…