专业编程基础技术教程

网站首页 > 基础教程 正文

你永远不知道程序员能够通过Python带给别人怎样的惊喜

ccvgpt 2024-08-11 15:03:27 基础教程 8 ℃


零基础画小猪佩奇

零基础教你用Python画小猪佩奇

你永远不知道程序员能够通过Python带给别人怎样的惊喜

趣味游戏

24行Python代码让小球“弹”起来


办公应用

普通小白学会Python到底具体能做什么呢?

每天一封爱心邮件

你的女朋友会因为你没说早安而生气吗?这对于程序员来说,简直小问题,很早便有人用Python 来制造浪漫了。

每天早晨定时发一封爱的Email,来提醒女朋友今日天气,记录在一起的日子……永远不要和程序员比浪漫,因为他的Python比你的手管用。

不会用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')

以上代码是这样去运行的

  1. 将 catIm 的高度和宽度保存在 catImWidth 和 catImHeight 中。我们得到了 catIm 的副本,并保存在 catCopyTwo。
  2. 有了一个副本可以粘贴,我们就开始循环,将faceIm粘贴到catCopyTwo。外层for循环的left变量从0开始,增量是faceImWidth (即 230)。
  3. 内层 for 循环的 top 变量从 0 开始,增量是 faceImHeight(即 215)。这些嵌套的 for 循环生成了 left 和 top 的值,将 faceIm 图像按照网格粘贴到 Image 对象catCopyTwo,如图 2 所示。
  4. 为了看到嵌套循环的工作过程,我们输出了 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,非常受欢迎,第二版全新升级,会给你更多惊喜的哦~

Tags:

最近发表
标签列表