>>> 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程序使用PNGJPEG文件,但Pillow还支持许多格式,不仅仅 是这两个。扩展resizeAndAddLogo.py, 让它也能处理GIFBMP图像。

另一个小问题是,只有文件扩展名小写时,程序才 修改 PNGJPEG 文件。例如,它会处理 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 值,可以通过 xy坐标的定位。 两种常见的图像格式是 JPEGPNGPillow 模块可以处理这两种图像格式和其他格式。

当图像被加载为Image对象时,它的宽度和高度作为 两整数元组,保存在size属性中。Image数据类型 的对象也有一些方法,实现常见的图像处理: crop()copy()paste()resize()rotate()transpose()。要将Image对象保存为 图像文件,就调用save()方法。

如果希望程序在图像上绘制形状,就使用 ImageDraw 的 方法绘制点、线、矩形、椭圆和多边形。该模块也提供了一些 方法,用你选择的字体和大小绘制文本。

虽然像 Photoshop 这样高级(且昂贵)的应用程序 提供了自动批量处理功能,但你可以用 Python 脚本, 免费完成许多相同的修改。在前面的章节中, 你编写 Python程序来处理纯文本文件、电子表格、 PDF 和其他格式。利用 Pillow 模块, 你已将编程能力扩展到处理图像!