>>> from env_helper import info; info()
页面更新时间: 2023-04-15 21:54:13
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-7-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
1.5. 实践项目¶
作为实践,编程完成以下任务。
1.5.1. 扩展和修正本章项目的程序¶
本章的resizeAndAddLogo.py
程序使用PNG
和
JPEG
文件,但Pillow
还支持许多格式,不仅仅
是这两个。扩展resizeAndAddLogo.py
,
让它也能处理GIF
和BMP
图像。
另一个小问题是,只有文件扩展名小写时,程序才 修改 PNG
和 JPEG
文件。例如,它会处理 zophie.png
,但不处理 zophie.PNG
。修改
代码,让文件扩展名检查不区分大小写。
最后,添加到右下角的徽标本来只是一个小标记,
但如果该图像与徽标本身差不多大,结果将类似于 图17-16。修改
resizeAndAddLogo.py
,使得图像
必须至少是徽标的两倍的宽度和高度,然后才粘贴徽标。
否则,它应该跳过添加徽标。
图17-16如果图像不比徽标大很多,结果很难看.
1.5.2. 在硬盘上识别照片文件夹¶
我有一个坏习惯,从数码相机将文件传输到硬盘的 临时文件夹后,会忘记这些文件夹。编程扫描整个硬盘, 找到这些遗忘的“照片文件夹”,就太好了。
编写一个程序,遍历硬盘上的每个文件夹,找到可能的 照片文件夹。当然,首先你必须定义什么是“照片文件夹”。 假定就是超过半数文件是照片的任何文件夹。你如何定义 什么文件是照片?
首先,照片文件必须具有文件扩展名.png或.jpg。此外, 照片是很大的图像。照片文件的宽度和高度都必须大于 500像素。这是安全的假定,因为大多数数码相机照片, 宽度和高度都是几千像素。
作为提示,下面是这个程序的粗略框架:
#! python3
# Import modules and write comments to describe this program.
for foldername, subfolders, filenames in os.walk('C:\\'):
numPhotoFiles = 0
numNonPhotoFiles = 0
for filename in filenames:
# Check if file extension isn't .png or .jpg.
if TODO:
numNonPhotoFiles += 1
continue # skip to next filename
# Open image file using Pillow.
# Check if width & height are larger than 500.
if TODO:
# Image is large enough to be considered a photo.
numPhotoFiles += 1
else:
# Image is too small to be a photo.
numNonPhotoFiles += 1
# If more than half of files were photos,
# print the absolute path of the folder,
if TODO:
print(TODO)
程序运行时,它应该在屏幕上打印所有照片文件夹的绝对路径。
1.5.3. 定制的座位卡¶
第13章包含了一个实践项目,利用纯文本文件的客人名单,
创建定制的邀请函。作为附加项目,请使用 Pillow
模块,
客人创建定制的座位卡图像。从 http://nostarch.com/automatestuff/
下载资源文件 guests.txt
,对于其中列出的客人,生成带有客人
名字和一些鲜花装饰的图像文件。在 http://nostarch.com/automatestuff/
的资源中,包含一个版权为公共领域的鲜花图像。
为了确保每个座位卡大小相同,在图像的边缘添加
一个黑色的矩形,这样在图像打印出来时,可以沿线剪裁。 Pillow
生成的
PNG
文件被设置为每英寸72个像素,
因此4×5英寸的卡片需要288×360像素的图像。
1.5.4. 小结¶
图像由像素的集合构成,每个像素具有表示颜色的 RGBA
值,可以通过 x
和 y
坐标的定位。 两种常见的图像格式是 JPEG
和 PNG
。
Pillow
模块可以处理这两种图像格式和其他格式。
当图像被加载为Image
对象时,它的宽度和高度作为
两整数元组,保存在size
属性中。Image
数据类型
的对象也有一些方法,实现常见的图像处理: crop()
、copy()
、
paste()
、resize()
、
rotate()
和transpose()
。要将Image对象保存为
图像文件,就调用save()
方法。
如果希望程序在图像上绘制形状,就使用 ImageDraw
的
方法绘制点、线、矩形、椭圆和多边形。该模块也提供了一些
方法,用你选择的字体和大小绘制文本。
虽然像 Photoshop
这样高级(且昂贵)的应用程序
提供了自动批量处理功能,但你可以用 Python
脚本,
免费完成许多相同的修改。在前面的章节中, 你编写
Python
程序来处理纯文本文件、电子表格、 PDF
和其他格式。利用
Pillow
模块, 你已将编程能力扩展到处理图像!