下面是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生成方形或圆形的缩略图。