零基础画小猪佩奇
趣味游戏
办公应用
每天一封爱心邮件
你的女朋友会因为你没说早安而生气吗?这对于程序员来说,简直小问题,很早便有人用Python 来制造浪漫了。
每天早晨定时发一封爱的Email,来提醒女朋友今日天气,记录在一起的日子……永远不要和程序员比浪漫,因为他的Python比你的手管用。
不会用Python发邮件的盆友看这里
图像处理
还记得前段时间火起来的“蚂蚁牙黑”么,通过图片即可让人笑起来。
图源https://new.qq.com/rain/a/20210302A0BJ4A00
其实,P图,Python也很可!将完整的图片平均分配于9个格子中(九宫格),这个特效Python也可以轻松实现。《Python编程快速上手 让繁琐工作自动化 第2版》里告诉我们了具体步骤。
首先,我们需要借助一个模块——pillow
pillow是一个第三方 Python 模块,用于处理图像文件。该模块包含一些函数,可以很容易地裁剪图像、调整图像大小,以及编辑图像的内容。
可以通过运行 pip install--user -U pillow==6.0.0 来安装 pillow。
然后,我们将操作分为两大步
小猫咪叫Zophie
1.导入图像至工作目录
将图像文件 zophie.png 放在当前工作目录中,你就可以将 Zophie 的图像加载到 Python 中, 像这样
>>> from PIL import Image
>>> catIm = Image.open('zophie.png')
- 如果图像文件不在当前工作目录,就调用 os.chdir()函数,将工作目录变为包含图像文件的文件夹
>>> import os
>>> os.chdir('C:\\folder_with_image_file')
- 调用 save()方法,对 Image 对象的所有更改都可以保存到图像文件中 (也是任何格式)。
为了更精确地讲述,假定你已导入了 pillow 的 Image 模块,并将 Zophie 的图像保存在了变量 catIm 中。
2.复制和粘贴图像到其他图像
分屏的原理其实是复制与粘贴,将原本的图像复制,然后设置模块分别粘贴于其中。小伙伴们没必要觉得很复杂,就跟电脑上用鼠标复制粘贴是一样的,只不过一个是窗口模式,一个是编译模式罢了,有些人编译模式用惯了,用窗口反而觉得复杂了呢哈哈~
主要用到的是 copy 和 paste 函数
- copy()方法返回一个新的 Image 对象,它和原来的 Image 对象具有一样的图像。如果需要修改图像,同时也希望保持原有的版本不变,该方法非常有用。例如,在交互式环境中输入以下代码
>>> from PIL import Image
>>> catIm = Image.open('zophie.png')
>>> catCopyIm = catIm.copy()
catIm 和 catCopyIm 变量包含了两个独立的 Image 对象,它们的图像相同。既然 catCopyIm 中保存了一个 Image 对象,那么你可以随意修改 catCopyIm,将它存入一个新的文件名,而 zophie.png 没有改变。
例如,让我们尝试用 paste()方法修改 catCopyIm。
- paste()方法在 Image 对象上调用,将另一个图像粘贴在它上面。我们继续演示交互式环境的例子,将一个较小的图像粘贴到 catCopyIm:
>>> faceIm = catIm.crop((335, 345, 565, 560))
>>> faceIm.size (230, 215)
>>> catCopyIm.paste(faceIm, (0, 0))
>>> catCopyIm.paste(faceIm, (400, 500))
>>> catCopyIm.save('pasted.png')
我们向 crop() 传入一个矩形元组,指定 zophie.png 中的一个矩形区域,该区域包含 Zophie 的脸。这将创建一个 Image 对象,表示 230 像素×215 像素的裁剪区域,被保存在 faceIm 中。现在,我们可以将 faceIm 粘贴到 catCopyIm。
paste()方法有两个参数:一个“源”Image 对象;一个包含 x 和 y 坐标的元组,指明源 Image 对象粘贴到主 Image 对象时左上角的位置。最后,我们将修改后的 catCopyIm 存入 pasted.png。图 1 所示为 pasted.png。
图 1 猫 Zophie,包含两次粘贴它的脸
注意:尽管名称是copy()和paste(),但Pillow中的方法不使用计算机的剪贴板。
- 请注意,paste()方法在原图上修改它的 Image 对象,它不会返回粘贴后图像的 Image 对象。如果想调用 paste(),又要保持原始图像的未修改版本,就需要先复制图像,然后在副本上调用 paste()。
- 假定要用 Zophie 的头平铺整个图像,如图 2所示,
图 2 嵌套的 for 循环与 paste(), 两次粘贴它的脸用于复制猫脸(可以称之为 dupli-cat)
- 可以用两个 for 循环来实现这个效果。继续交互式环境的例子,输入以下代码:
>>> catImWidth, catImHeight = catIm.size
>>> faceImWidth, faceImHeight = faceIm.size
>>> catCopyTwo = catIm.copy()
>>> for left in range(0, catImWidth, faceImWidth):
for top in range(0, catImHeight, faceImHeight):
print(left, top)
catCopyTwo.paste(faceIm, (left, top))
0 0
0 215
0 430
0 645
0 860
0 1075
230 0
230 215
--snip—
690 860
690 1075
>>> catCopyTwo.save('tiled.png')
以上代码是这样去运行的
- 将 catIm 的高度和宽度保存在 catImWidth 和 catImHeight 中。我们得到了 catIm 的副本,并保存在 catCopyTwo。
- 有了一个副本可以粘贴,我们就开始循环,将faceIm粘贴到catCopyTwo。外层for循环的left变量从0开始,增量是faceImWidth (即 230)。
- 内层 for 循环的 top 变量从 0 开始,增量是 faceImHeight(即 215)。这些嵌套的 for 循环生成了 left 和 top 的值,将 faceIm 图像按照网格粘贴到 Image 对象catCopyTwo,如图 2 所示。
- 为了看到嵌套循环的工作过程,我们输出了 left 和 top。粘贴完成后,我们将修改后的 catCopyTwo 保存到 tiled.png。
这是将小猫咪猫Zophie的图片中头部位置裁剪出,然后划分到不同区域中,但其原理是一样的,主要用到Python中的复制与粘贴函数。
所以,程序员的P图技术才叫“秀”!
其它好玩的事情还有很多……
推荐阅读
凭借简单、易学、免费、开源、可移植、可扩展、可嵌入、面向对象等优点,Python的应用极为广泛,前端应用开发、系统网络运维、爬虫、数据分析、机器学习、正则表达式、OCR等等,都是Python的用武之地。
在《Python编程快速上手 让繁琐工作自动化 第2版》这本书里,作者教我们利用Python编程在几分钟内完成手动需要几小时的工作,无须事先具备编程经验,轻松上手。
Python编程快速上手 让繁琐工作自动化 第2版
作者不仅介绍Python语言的基础知识,并以项目实践教会读者如何应用这些知识和技能。通过这本书,你能学会模式匹配与正则表达式、读写文件、组织文件、调试、从Web抓取信息、处理Excel电子表格、处理PDF和Word文档、处理CSV文件和JSON数据、保持时间、计划任务和启动、发送电子邮件和短信、操作图像等。
第一版在豆瓣评分高达8.9,非常受欢迎,第二版全新升级,会给你更多惊喜的哦~