生成方形或圆形的缩略图是图像处理中常见的操作之一,Python的图像处理库Pillow提供了便捷的方法来实现这一操作。
首先,需要安装Pillow库,可以通过以下命令在命令行中进行安装:
pip install pillow
安装完成后,在Python代码中,可以通过以下方式来生成方形的缩略图:
from PIL import Image
# 打开原图像
img = Image.open('original.jpg')
# 获取原图像的尺寸
w, h = img.size
# 计算缩略图的尺寸
size = min(w, h)
# 剪切原图像中心区域,生成缩略图
square_img = img.crop(((w-size)//2, (h-size)//2, (w+size)//2, (h+size)//2))
thumb_img = square_img.resize((256, 256))
# 保存缩略图
thumb_img.save('thumbnail.jpg')
上面的代码中,首先打开了一张原图像,然后通过计算获得了原图像中心区域的尺寸,即生成方形缩略图的尺寸。接着,剪切了原图像中心区域,生成了方形缩略图,并通过resize()方法调整尺寸,最后保存缩略图。
如果需要生成圆形缩略图,可以使用Pillow库的ImageDraw、ImageFilter模块来实现,代码如下:
from PIL import Image, ImageDraw, ImageFilter
# 打开原图像
img = Image.open('original.jpg')
# 获取原图像的尺寸
w, h = img.size
# 计算圆形缩略图的半径
radius = min(w, h) / 2
# 创建输出图像
thumb_img = Image.new('RGBA', (256, 256), (0, 0, 0, 0))
draw = ImageDraw.Draw(thumb_img)
# 绘制圆形
draw.ellipse((0, 0, 256, 256), fill=(255, 255, 255, 255), outline=(0, 0, 0, 255))
# 将原图像剪切成圆形,并缩放到输出图像的大小
mask = Image.new('RGBA', (w, h), (0, 0, 0, 0))
mask_draw = ImageDraw.Draw(mask)
mask_draw.ellipse(((w-radius, h-radius), (w+radius, h+radius)), fill=(255, 255, 255, 255), outline=(0, 0, 0, 255))
img.putalpha(mask)
thumb_img.paste(img.resize((int(radius*2), int(radius*2)), Image.ANTIALIAS), (int(256-radius), int(256-radius)))
# 保存缩略图
thumb_img.save('thumbnail.png')
上面的代码中,首先打开了一张原图像,然后通过计算获得了圆形缩略图的半径。接着,创建了一个输出图像,使用ImageDraw模块绘制了一个白色的圆形,作为缩略图的背景。然后将原图像剪切成圆形,并使用putalpha()方法将图像的透明度设置为圆形遮罩的透明度,最后将剪切后的图像缩放到半径大小,粘贴到输出图像上,并保存。