生成缩略图是Web应用中最常见的操作之一,Python中的Pillow库提供了简单的方式生成方形或圆形缩略图。下面是生成方形或圆形缩略图的步骤:
-
首先,需要安装Pillow库。可以使用pip安装,命令行输入
pip install Pillow
即可。 -
导入Pillow库。在Python脚本中添加以下代码:
from PIL import Image, ImageDraw
-
打开需要生成缩略图的原始图片。
img = Image.open('original_image.jpg')
- 计算出生成的缩略图的尺寸。在Web应用中,一般会限制缩略图的最大尺寸,可以使用Pillow的
thumbnail()
方法生成缩略图。
max_size = 200
img.thumbnail((max_size, max_size))
- 生成方形缩略图。使用Pillow的
crop()
方法将原始图片裁剪成方形后,再使用resize()
方法调整大小即可生成方形缩略图。
crop_size = min(img.size)
left = (img.size[0] - crop_size) / 2
top = (img.size[1] - crop_size) / 2
right = left + crop_size
bottom = top + crop_size
img = img.crop((left, top, right, bottom))
img = img.resize((max_size, max_size))
img.save('square_thumb.jpg')
- 生成圆形缩略图。使用Pillow的ImageDraw模块,先创建一个透明的PNG图像作为圆形缩略图的背景。然后,使用
draw.arc()
方法绘制一个圆形路径,并将其转换为png_alpha模式。最后,使用Pillow的paste()
方法将原始图片粘贴到PNG图像上即可生成圆形缩略图。
# 创建透明PNG图像
thumb_size = (max_size, max_size)
thumb = Image.new('RGBA', thumb_size, (0, 0, 0, 0))
# 绘制圆形路径
mask = Image.new('L', thumb_size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + thumb_size, fill=255)
del draw
# 将路径转换为png_alpha模式
thumb.putalpha(mask)
# 粘贴原始图片到PNG图像上
img = img.resize(thumb_size)
thumb.paste(img, (0, 0), img)
thumb.save('circle_thumb.png')
示例说明:
示例1:生成200×200像素的方形缩略图
from PIL import Image, ImageDraw
# 打开原始图片
img = Image.open('original_image.jpg')
# 计算生成的缩略图的尺寸
max_size = 200
img.thumbnail((max_size, max_size))
# 生成方形缩略图
crop_size = min(img.size)
left = (img.size[0] - crop_size) / 2
top = (img.size[1] - crop_size) / 2
right = left + crop_size
bottom = top + crop_size
img = img.crop((left, top, right, bottom))
img = img.resize((max_size, max_size))
img.save('square_thumb.jpg')
示例2:生成200×200像素的圆形缩略图
from PIL import Image, ImageDraw
# 打开原始图片
img = Image.open('original_image.jpg')
# 计算生成的缩略图的尺寸
max_size = 200
img.thumbnail((max_size, max_size))
# 生成圆形缩略图
thumb_size = (max_size, max_size)
thumb = Image.new('RGBA', thumb_size, (0, 0, 0, 0))
mask = Image.new('L', thumb_size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + thumb_size, fill=255)
del draw
thumb.putalpha(mask)
img = img.resize(thumb_size)
thumb.paste(img, (0, 0), img)
thumb.save('circle_thumb.png')
以上就是使用Python Pillow生成方形或圆形缩略图的完整攻略。