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()
函数来获得所需的结果。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串