Python 图像压缩
本篇文章将介绍使用 Python 中的 PIL 库压缩图像。
在使用 PIL 库之前,请使用 pip 或 python 安装它。
pip install Pillow
使用 PIL 库的 Python 图像压缩
图像压缩用于减小图像的大小。 我们知道图像由包含颜色或强度值的像素组成。
缩小图像或压缩图像的方法主要有两种。 一种方法是调整图像大小以减少存在的像素数。
例如,如果图像是 500 x 500 像素,我们可以通过将像素数从 500 x 500 像素减少到 100 x 100 像素来压缩它或减小其文件大小。 生成的图像将被压缩,但会变小,文件大小也会减小。
像素数越低,文件大小越小,但图像会变小。 我们可能必须缩放调整大小的图像才能正确看到它。
我们可以使用 PIL 库的图像模块的 resize()
函数来调整图像的大小。 resize()
函数的基本语法如下。
MyImage.resize(size, resample, box, reducing_gap)
在上面的代码中,MyImage 是包含输入图像的 Image 模块对象。 size 参数包含输出图像的大小,它应该是一个二值元组,如 (width, height)。
resample 参数是可选的,默认情况下设置为 None,它用于设置重采样过滤器,它将应用于图像以使其像 PIL.Image.Resampling.NEAREST 过滤器一样平滑,使用它们平滑每个像素 最近的像素。
box 参数也是可选的,默认值设置为 None,用于设置图像的感兴趣区域,它应该是一个包含框位置的 4 值元组,如 (0,0,width,height) .
reducing_gap 也是一个可选参数,用于对图像进行优化,进一步减小图像的尺寸,默认情况下,其值设置为无。
reducing_gap 的值应该是一个整数; 较小的值意味着快速调整大小,而较大的值意味着缓慢调整大小但效果更好。
例如,让我们使用 resize()
函数压缩图像。 请参阅下面的代码。
from PIL import Image
input_img = Image.open('test.jpg')
print('input image size:', input_img.size)
output_img = input_img.resize((300,300))
print('output image size:', output_img.size)
output_img.save('testNew.jpg')
输出:
input image size: (600, 600)
output image size: (300, 300)
在上面的代码中,我们使用了 PIL 库的 Image 模块的 open()
和 save()
函数来打开和保存图片。
我们只在 open()
函数中提供了图像的名称和扩展名,因为图像和 Python 代码文件在同一目录中,但如果它们不在同一目录中,我们必须提供完整路径 图像文件及其名称和扩展名以阅读它。
我们还在 save()
函数中使用了图像名称和扩展名,这会将图像保存在 Python 代码文件的当前目录中,但我们也可以通过提供图像的完整路径将图像保存在另一个目录中 名称和扩展名。
在上图中,左侧图像是原始图像; 它的大小是 21.6 kb,右边的图像是调整后的图像,它的大小是 6.88 kb。
右边的图像被放大到 200%,这样我们就可以很容易地将它与原始图像进行比较,并看到两张图像之间的质量差异很小。
在上面的示例中,我们没有使用任何可选参数,但我们可以使用它们来提高输出图像的质量。
另一种压缩图像的方法是降低图像质量。 在这种方法中,图像的像素数将保持不变,但图像的质量会随着图像文件的大小而降低。
我们可以在 save()
函数中使用优化和质量参数来减小图像的文件大小。
optimize 参数将设置为 true 以对图像应用优化,这将在不损失太多质量的情况下减小尺寸,并且 quality 参数可以设置为 1 到 100 之间的任何百分比。
如果我们将质量设置为 50%,则图像文件大小将减半。 例如,在上面的例子中,我们只使用 save() 函数来减小文件大小。
请参阅下面的代码。
from PIL import Image
input_img = Image.open('test.jpg')
output_img = input_img.save('testNew.jpg', optimize=True, quality=50)
input_img_2 = Image.open('testNew.jpg')
print('Input image size:',input_img.size)
print('Output Image Size:',input_img_2.size)
输出:
Input image size: (600, 600)
Output Image Size: (600, 600)
在上面的输出中,我们可以看到输入和输出图像的像素数量相同,输出图像的质量有所下降。 左图是原始图像,右图是输出图像。
如果我们比较两个示例,两个输出图像的质量几乎相同,但第一个示例中输出图像的像素大小小于第二个示例中输出图像的像素大小。 我们还可以结合使用 resize()
和 save()
函数来获得所需的结果。
相关文章
在 Python 中调整图像大小同时保持其纵横比
发布时间:2023/06/18 浏览次数:187 分类:Python
-
这篇 Python 文章的目的是解释我们如何在 Python 中调整图像大小同时保持其纵横比。 在 Python 中调整图像大小的方法还将通过适当的示例程序描述其用法。在 Python 中调整图像大小同时保持其纵横
Python类相等检查
发布时间:2023/06/18 浏览次数:130 分类:Python
-
本文讨论如何在 Python 中检查类相等性。 为此,本文讨论了如何在 Python 类中实现 eq() 方法。
Python 类工厂
发布时间:2023/06/18 浏览次数:83 分类:Python
-
本篇文章介绍了创建类工厂的不同方法。如何在 Python 中创建类工厂 有两种设计类工厂的方法; 一个在编码时创建一个类,而另一个在运行时创建一个类。
Python 抽象属性
发布时间:2023/06/18 浏览次数:99 分类:Python
-
本篇文章将介绍使用 abc 或抽象基类模块在 Python 中创建具有抽象属性的类。Python 抽象属性 面向对象编程中的抽象用于向用户隐藏不必要的信息。
Python 中的数据类继承
发布时间:2023/06/18 浏览次数:122 分类:Python
-
本文解释了数据类、继承、多级继承、默认和非默认属性等概念。 提供了足够的编码示例以掌握编译过程中展开的概念。
Python 生成器类
发布时间:2023/06/18 浏览次数:185 分类:Python
-
本篇文章将讨论使用 yield 语句和 next() 函数在 Python 中创建生成器类。要了解生成器,我们首先需要了解下面讨论的迭代器。Python 迭代器是用于逐个访问容器中元素的对象。
在 Python 中实现多个装饰器
发布时间:2023/06/17 浏览次数:95 分类:Python
-
本文重点介绍多个装饰器的概念。 读者将学习装饰器的基础知识,它是如何创建和实现的,以及如何将它与其他装饰器链接到一个函数上。
使用 Python 装饰器重试代码块
发布时间:2023/06/17 浏览次数:94 分类:Python
-
在这种情况下,修改会在给定情况下多次重试函数,其返回值可能与我们想要的不同。@retry 装饰器的重要性 我们可以使用装饰器来扩展特定函数的行为,我们可以轻松地创建装饰器来修改该函
Python 装饰器顺序
发布时间:2023/06/17 浏览次数:192 分类:Python
-
在这篇 Python 文章中,我们将了解什么是装饰器、它们的使用方式以及我们如何利用它们来构建代码。 我们将看到装饰器是如何成为一种强大的工具,可以用来为我们的应用程序添加功能,并且