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

  • Post category:Python

生成缩略图是Web应用中最常见的操作之一,Python中的Pillow库提供了简单的方式生成方形或圆形缩略图。下面是生成方形或圆形缩略图的步骤:

  1. 首先,需要安装Pillow库。可以使用pip安装,命令行输入pip install Pillow即可。

  2. 导入Pillow库。在Python脚本中添加以下代码:from PIL import Image, ImageDraw

  3. 打开需要生成缩略图的原始图片。

img = Image.open('original_image.jpg')
  1. 计算出生成的缩略图的尺寸。在Web应用中,一般会限制缩略图的最大尺寸,可以使用Pillow的thumbnail()方法生成缩略图。
max_size = 200
img.thumbnail((max_size, max_size))
  1. 生成方形缩略图。使用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')
  1. 生成圆形缩略图。使用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生成方形或圆形缩略图的完整攻略。