迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 图像压缩

作者:迹忆客 最近更新:2023/06/18 浏览次数:

本篇文章将介绍使用 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)

resized images

在上面的代码中,我们使用了 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)

reduce quality of images

在上面的输出中,我们可以看到输入和输出图像的像素数量相同,输出图像的质量有所下降。 左图是原始图像,右图是输出图像。

如果我们比较两个示例,两个输出图像的质量几乎相同,但第一个示例中输出图像的像素大小小于第二个示例中输出图像的像素大小。 我们还可以结合使用 resize()save() 函数来获得所需的结果。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便