详解用Python Pillow生成方形或圆形的缩略图

  • Post category:Python

下面是Python Pillow生成方形或圆形的缩略图的完整攻略:

1. 安装Pillow

首先,我们需要安装Python Pillow库。在终端中使用以下命令可以安装Pillow:

pip install pillow

2. 生成方形缩略图

要生成方形缩略图,可以使用Pillow的thumbnail()方法。以下是一个示例代码:

from PIL import Image

# 打开原始图片
im = Image.open('原始图片.jpg')

# 生成方形缩略图
im.thumbnail((300, 300))

# 保存缩略图
im.save('方形缩略图.jpg')

在注意到该示例代码中的thumbnail()方法,它将原始图片缩小为一个300×300的方形图像。然后使用save()方法将生成的缩略图保存到本地。

3. 生成圆形缩略图

要生成圆形缩略图,需要使用两张图片,第一张图片是原始图片,第二张图片是掩码图片,用于裁剪原始图片。以下是示例代码:

from PIL import Image, ImageDraw

# 打开原始图片
im = Image.open('原始图片.jpg')

# 生成圆形掩码图片
mask = Image.new('L', im.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + im.size, fill=255)

# 裁剪原始图片
im = Image.composite(im, Image.new('RGBA', im.size, (255, 255, 255, 0)), mask)
im.thumbnail((300, 300))

# 保存缩略图
im.save('圆形缩略图.jpg')

上面的示例代码中,在生成掩码图像后,我们使用composite()方法将原始图片放在一个全透明的图片上,并使用掩码图片来裁剪原始图片。然后我们使用thumbnail()方法生成缩略图并将其保存到本地。

这是生成圆形缩略图的另一个代码示例,其中用到了额外的numpy库:

import numpy as np
from PIL import Image

def crop_circle(image):
    """裁剪圆形图像"""
    width, height = image.size
    radius = min(width, height) // 2
    circle_mask = np.zeros((height, width), dtype=np.uint8)
    cx, cy = width // 2, height // 2
    y, x = np.ogrid[-cy:height - cy, -cx:width - cx]
    index = x ** 2 + y ** 2 <= radius ** 2
    circle_mask[index] = 255
    masked_image = Image.fromarray(np.uint8(np.array(image) * (circle_mask / 255)))
    return masked_image

# 打开原始图片
im = Image.open('原始图片.jpg')

# 裁剪成圆形
im = crop_circle(im)

# 生成圆形缩略图
im.thumbnail((300, 300))

# 保存缩略图
im.save('圆形缩略图.jpg')

在这个示例代码中,我们通过crop_circle函数使用了numpy库来裁剪原始图像,并在此基础上生成了圆形缩略图。

希望这些示例代码能够帮助你使用Python Pillow生成方形或圆形的缩略图。