在Python中调整图片大小是一项很常见的任务,无论是对用户上传的图片做压缩,还是为模型训练统一输入尺寸,都需要用到相关的图像处理能力。下面介绍几种主流且容易上手的实现方式。

使用Pillow调整图片大小
Pillow是Python图像处理领域使用最广泛的库,安装方式为pip install Pillow。它提供了两种主要方式改变图片尺寸。
resize方法
resize会直接把图片调整为指定的宽高,可能不会保持原始比例。
from PIL import Image
# 打开原始图片
img = Image.open('test.jpg')
# 直接调整为400x300
new_img = img.resize((400, 300), Image.LANCZOS)
new_img.save('resized.jpg')
thumbnail方法
thumbnail会等比缩放图片,使其不超过给定的尺寸,且原地修改对象。
from PIL import Image
img = Image.open('test.jpg')
# 等比缩小,最长边不超过200
img.thumbnail((200, 200), Image.LANCZOS)
img.save('thumb.jpg')
使用OpenCV调整图片大小
OpenCV也支持便捷的缩放操作,函数名为cv2.resize。
import cv2
img = cv2.imread('test.jpg')
# 指定目标尺寸
resized = cv2.resize(img, (300, 200), interpolation=cv2.INTER_AREA)
cv2.imwrite('cv_resized.jpg', resized)
保持宽高比的计算方式
如果希望手动控制比例,可以先计算缩放系数再调用resize。
from PIL import Image
img = Image.open('test.jpg')
w, h = img.size
max_width = 500
ratio = max_width / w
new_size = (int(w * ratio), int(h * ratio))
img.resize(new_size, Image.LANCZOS).save('ratio.jpg')
方法对比
| 库 | 特点 | 适用场景 |
|---|---|---|
| Pillow | 接口简单,文档完善 | 常规图片处理 |
| OpenCV | 性能较好,偏计算机视觉 | 批量或算法预处理 |
在实际项目中,建议优先使用Pillow的thumbnail来避免变形,并在缩小时选择LANCZOS滤波器以获得更好画质。