Python Pillow - 创建缩略图



缩略图通常用于显示图像预览或原始图像的较小表示。它们对于优化网页和提高图像密集型应用程序的加载速度非常有用。Pillow 提供了一种方便的方法来从图像生成缩略图。以下是一些关于 Pillow 中缩略图的关键点。

  • 保持纵横比 - 创建缩略图时,Pillow 会保持原始图像的纵横比。这意味着缩略图的宽度和高度会根据原始图像成比例地调整,因此图像不会显得变形。

  • 减小文件大小 - 与原始图像相比,缩略图的大小更小。这种尺寸减小对于优化网页或在受限空间(例如画廊或列表中)显示图像非常有用。

  • 便捷性 - 它简化了创建缩略图的过程。它在调整图像大小的同时保持纵横比,并提供了一种简单的方法将调整大小的图像保存到文件中。

  • 质量控制 - 我们可以使用各种参数来控制缩略图的质量,例如大小、调整大小的滤镜类型以及如果我们以 JPEG 等压缩格式保存缩略图的压缩设置。

在 Pillow 中,我们有一个名为 thumbnail() 的方法,它允许我们为缩略图图像指定尺寸和形状。我们可以创建两种不同形状的缩略图,一种是正方形,另一种是圆形。

创建正方形缩略图

在本节中,我们将了解如何使用 Pillow 库的 thumbnail() 方法创建正方形缩略图。

thumbnail() 方法的语法和参数如下。

image.thumbnail(size, resample=Image.BOX)

其中,

  • size (必需) - 此参数将缩略图的尺寸(即宽度和高度)指定为一个元组 (width, height)。我们也可以只指定一个维度,另一个维度将自动计算以保持纵横比。

  • resample (可选) - 此参数定义在调整图像大小时要使用的重采样滤镜。它可以是以下常量之一:

    • Image.NEAREST (默认) - 最近邻采样。

    • Image.BOX - 箱式采样,类似于最近邻,但通常会产生略微平滑的结果。

    • Image.BILINEAR - 双线性插值。

    • Image.HAMMING - 汉明窗 sinc 插值。

    • Image.BICUBIC - 双三次插值。

    • Image.LANCZOS - Lanczos 窗 sinc 插值。

示例

在这个例子中,我们通过将缩略图的宽度和高度参数指定给 resize 参数,使用 thumbnail() 方法创建正方形缩略图。

from PIL import Image

#Open the image
image = Image.open("Images/tutorialspoint.png")

#Define the thumbnail size as a tuple (width, height)
thumbnail_size = (200, 200)

#Create a thumbnail
image.thumbnail(thumbnail_size, resample = Image.BOX )
image.save("output Image/square_thumbnail_image.png")
image.show() 

输出

tutorialspoint

示例

这是另一个使用 thumbnail() 模块创建宽度为 100,高度为 100 的正方形缩略图的示例。

from PIL import Image

#Open the image
image = Image.open("Images/butterfly.jpg")

#Define the thumbnail size as a tuple (width, height)
thumbnail_size = (100, 100)

#Create a thumbnail
image.thumbnail(thumbnail_size, resample = Image.Resampling.BILINEAR)
image.save("output Image/square_thumbnail_image.png")
image.show() 

输出

square thumbnail image

创建圆形缩略图

在上一节中,我们了解了什么是缩略图以及如何使用 Pillow 的 thumbnail() 方法创建正方形缩略图。现在,我们将了解圆形缩略图的创建。圆形缩略图意味着缩略图将呈圆形。

创建圆形缩略图的 thumbnail() 方法的语法和参数与正方形缩略图相同。

以下是创建圆形缩略图的步骤。

  • 从 Pillow 库导入必要的模块 ImageImageDraw

  • 使用 Image.open() 方法加载原始图像。

  • 使用 size 属性确定原始图像的尺寸。

  • 使用 ImageDraw.Draw() 方法从蒙版图像创建一个新对象。

  • 使用 draw.ellipse() 方法在蒙版图像上绘制一个椭圆。将图像居中到椭圆的中心。

  • 使用 Image.new() 方法创建一个与原始图像尺寸相同,背景透明的新图像。

  • 使用 save() 方法保存圆形缩略图图像。

  • 使用 show() 方法显示创建的圆形缩略图图像。

示例

在这个例子中,我们使用 Pillow 库的 thumbnail() 方法创建圆形缩略图。

#importing the required libraries
from PIL import Image, ImageDraw 

#open image file
img = Image.open('Images/butterfly.jpg')

#resize image
img.thumbnail((2000, 2000))

#create circular mask
mask = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((center[0] - radius, center[1] - radius, center[0] + radius, center[1] + radius), fill = 255)

#apply mask to image
result = Image.new('RGBA', img.size, (255, 255, 255, 0))
result.paste(img, (0, 0), mask)

#save circular thumbnail image
result.save('OutputImages/circular_thumbnail1.png')

#showing the image using show() function
result.show()

使用的图像

butterfly original image

输出

circular thumbnail
广告