Python Pillow 简明教程

Python Pillow - Creating Thumbnails

缩略图通常用于显示图像预览或较小尺寸的原始图像。它们可用于优化网页并提高以图像为主的应用程序的加载速度。Pillow 提供了一种从图像生成缩略图的便捷方式。以下是 Pillow 中有关缩略图的一些要点。

  1. Preservation of Aspect Ratio − 在创建缩略图时,Pillow 会保留原始图像的宽高比。这意味着缩略图的宽度和高度与原始图像成比例调整,这样图像就不会出现变形。

  2. Reduced File Size − 与原始图像相比,缩略图的尺寸更小。缩小尺寸有助于优化网页或在画廊或列表等受限空间中显示图像。

  3. Convenience − 它简化了创建缩略图的过程。它在保留宽高比的同时调整图像大小,并提供了将调整大小后的图像保存为文件的一种简单方式。

  4. Quality Control − 我们可以使用各种参数控制缩略图的质量,例如尺寸、调整大小的滤镜类型和压缩设置(如果我们以 JPEG 等压缩格式保存缩略图)。

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

Creating square Thumbnails

在本章中,我们将看到如何使用 pillow 库的 thumbnail() 方法创建方形缩略图。

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

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

其中,

  1. size (required) − 此参数指定尺寸,即缩略图的宽度和高度,以元组 (width, height) 的形式。我们也可以只指定一个尺寸,另一个尺寸将根据宽高比自动计算。

  2. resample (optional) − 此参数定义调整图像大小时要使用的重采样滤镜。它可以是以下常量之一 - Image.NEAREST (default) − 最近邻采样。 Image.BOX − 盒形采样,与最近邻类似,但通常会产生更平滑的结果。 Image.BILINEAR − 双线性插值。 Image.HAMMING − 汉明窗正弦插值。 Image.BICUBIC − 三次样条插值。 Image.LANCZOS − Lanczos 窗正弦插值。

Example

在此示例中,我们通过使用 thumbnail() 方法创建方形缩略图,即将缩略图的宽度和高度参数指定为 resize 参数。

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

Example

以下是如何使用 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

Creating circle Thumbnails

在上文中,我们已经了解了什么是缩略图以及如何使用 pillow thumbnail() 方法创建方形缩略图。现在,我们将看到如何创建圆形缩略图。圆形缩略图表示缩略图将呈圆形。

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

以下是创建圆形缩略图需要遵循的步骤。

  1. 从 Pillow 库中导入必要的模块 ImageImageDraw

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

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

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

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

  6. 使用 Image.new() 方法创建一张新图像,其尺寸和原始图像相同,且背景透明。

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

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

Example

在这个示例中,我们通过使用枕头库的 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