如何使用PIL的thumbnail方法仅固定宽度并保持图像宽高比
固定宽度保持宽高比调整PIL图像尺寸的解决方案
你对thumbnail方法的逻辑判断是正确的:该方法会将图像等比缩放至宽、高均不超过传入的尺寸元组的阈值,因此当原图是高大于宽的竖图时,会先触达高度阈值,最终宽度就会小于你期望的256px,无法满足固定宽度的需求。
要实现固定宽度、自动计算高度保持宽高比,直接手动计算缩放比例后调用resize方法即可,实现逻辑如下:
- 读取原图的宽、高参数
- 以目标宽度为基准计算缩放比例
- 用原始高度乘以缩放比例得到新的高度
- 调用
resize方法执行缩放即可
完整代码示例
from PIL import Image def resize_to_fixed_width(img, target_width): # 获取原图尺寸 original_width, original_height = img.size # 计算缩放比例 scale_ratio = target_width / original_width # 计算新高度,取整避免参数报错 new_height = int(round(original_height * scale_ratio)) # 执行缩放,使用LANCZOS采样保证缩放后画质 # 注意:PIL 9.1.0以下版本采样参数为 Image.ANTIALIAS resized_img = img.resize((target_width, new_height), Image.Resampling.LANCZOS) return resized_img # 调用示例 if __name__ == "__main__": # 打开本地图像文件 img = Image.open("your_image_path.jpg") # 固定宽度为256px img_256w = resize_to_fixed_width(img, 256) # 输出验证尺寸 print(img_256w.size) # 保存调整后的图像 img_256w.save("resized_image.jpg")
用上述方法处理你给出的两张测试图,得到的尺寸分别为:
- 339x1000原图:256x755px
- 6000x4000原图:256x171px
完全符合固定宽度256px、保持原始宽高比的需求。
内容的提问来源于stack exchange,提问作者user17259141
相关产品推荐
相关产品推荐

