如何使用 Python 和 PIL 压缩图像?


在当今的数字时代,图像已成为我们生活中不可或缺的一部分。它们在各种平台(从社交媒体到网站)的沟通和表达中发挥着重要作用。但是,高质量的图像会占用大量的存储空间,这会导致网站加载时间变慢以及上传时间变长。在这种情况下,图像压缩就变得适用。通过减小图像的大小,您可以确保更快的加载时间、更低的带宽使用率以及更多的存储空间。

在本文中,我们将探讨使用 Python 和 PIL 压缩图像的过程。PIL,也称为 Python 图像库。它是 Python 中一个非常有用且重要的库,它能够打开、操作和保存各种图像文件格式。通过掌握该库的功能,我们可以轻松压缩图像并获得更快的加载时间和更少的存储空间带来的好处。

在我们深入研究代码之前,让我们快速了解一下不同类型的图像压缩。

图像压缩类型

主要有两种类型的图像压缩:有损压缩和无损压缩。

有损压缩:有损压缩是一种在压缩过程中会丢失某些数据的压缩类型。这意味着当您解压缩图像时,它将与原始图像不完全相同。但是,差异程度通常对人眼来说并不明显。有损压缩的示例包括 JPEG 和 GIF。

无损压缩:无损压缩是一种在压缩过程中不会丢失任何数据的压缩类型。这意味着当您解压缩图像时,它将与原始图像完全相同。无损压缩的示例包括 PNG 和 TIFF。

现在我们已经了解了不同类型的图像压缩,让我们继续学习代码。

如何使用 Python 和 PIL 压缩图像

步骤 1:安装 PIL

第一步是安装 PIL 库。为此,您可以使用 pip。打开终端或命令提示符并输入以下命令

pip install Pillow

成功消息

Collecting Pillow
  Downloading Pillow-8.4.0-cp39-cp39-win_amd64.whl (3.2 MB)
     |████████████████████████████████| 3.2 MB 2.1 MB/s
Installing collected packages: Pillow
Successfully installed Pillow-8.4.0

步骤 2:导入所需的库

安装 PIL 后,您需要将所需的库导入到 Python 程序中。为此,请在 Python 文件的开头添加以下代码行

from PIL import Image
import os

步骤 3:加载图像

现在,在导入所需的库后,让我们加载要压缩的图像。为此,我们可以使用 PIL 库中的 Image.open() 方法。

image = Image.open('image.jpg')

此代码打开名为“image.jpg”的图像并将其分配给变量“image”。

步骤 4:调整图像大小

加载图像后,我们需要调整其大小以减小文件大小。为此,我们可以使用 Image 模块中的 resize() 方法。

width, height = image.size
new_size = (width//2, height//2)
resized_image = image.resize(new_size)

此代码将图像大小调整为原始大小的一半。您可以根据需要更改图像大小。

步骤 5:保存压缩后的图像

调整图像大小后,我们需要保存压缩后的图像。为此,我们可以使用 Image 模块中的 save() 方法。

resized_image.save('compressed_image.jpg', optimize=True, quality=50)

压缩图像后,我们需要将其另存为新文件。此代码将压缩后的图像保存为名为“compressed_image.jpg”的文件。我们可以使用“optimize”参数确保图像针对网络使用进行了优化。此外,我们可以根据需要使用“quality”参数调整图像质量。

步骤 6:验证压缩后的图像

最后,我们需要验证压缩后的图像是否已正确保存。为此,我们可以比较原始图像和压缩后的图像的文件大小。

original_size = os.path.getsize('image.jpg')
compressed_size = os.path.getsize('compressed_image.jpg')

print("Original Size: ", original_size)
print("Compressed Size: ", compressed_size)

此代码将打印原始图像和压缩后的图像的文件大小。您可以验证压缩后的图像是否小于原始图像。

以下是完整的实现代码

示例

from PIL import Image
import os

image = Image.open('image.jpg')

width, height = image.size
new_size = (width//2, height//2)
resized_image = image.resize(new_size)

resized_image.save('compressed_image.jpg', optimize=True, quality=50)

original_size = os.path.getsize('image.jpg')
compressed_size = os.path.getsize('compressed_image.jpg')

print("Original Size: ", original_size)
print("Compressed Size: ", compressed_size)

输出

Original Size:  1234567
Compressed Size:  543210

请注意,实际文件大小将取决于用于代码的输入图像。这只是一个示例。

结论

总之,我们讨论了有损压缩和无损压缩之间的区别,以及后者如何在占用更多空间的同时更好地保持图像质量。然后,我们逐步介绍了如何在 Python 中使用 PIL 压缩图像。我们学习了如何调整图像大小并将其保存为压缩格式,以及一些最佳实践以确保获得最佳结果。

通过遵循本文中概述的步骤,您可以轻松压缩图像并将其优化以供网络使用。您可以调整压缩图像的质量和大小,以在图像质量和文件大小之间取得正确的平衡。无论您是网站开发人员还是业余摄影师,掌握图像压缩都是一项宝贵的技能,可以增强您的数字形象。

更新于: 2023年7月20日

12K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告