如何用Python Pillow将图片按比例适配至更大尺寸画布?
解决方案:将图片等比例适配到512×512画布
你的代码没有实现图片等比例放大的逻辑,只是直接把原图居中粘贴到了画布上,所以没法让小图片尽可能大。以下是修正后的代码:
import math from PIL import Image image = Image.open(input_path) canvas_w, canvas_h = 512, 512 img_w, img_h = image.size # 计算等比例缩放系数,取宽高方向的最小值,保证图片完全适配画布且尽可能大 scale = min(canvas_w / img_w, canvas_h / img_h) # 计算缩放后的图片尺寸(取整) new_w = int(math.floor(img_w * scale)) new_h = int(math.floor(img_h * scale)) # 用高画质算法缩放图片 scaled_image = image.resize((new_w, new_h), Image.Resampling.LANCZOS) # 计算缩放后图片的居中偏移量 offset_x = (canvas_w - new_w) // 2 offset_y = (canvas_h - new_h) // 2 # 创建目标画布,背景保持透明(需要白色背景可将(255,255,255,0)改为(255,255,255)) output_image = Image.new(image.mode, (canvas_w, canvas_h), (255, 255, 255, 0)) output_image.paste(scaled_image, (offset_x, offset_y)) output_image.save(output_path)
核心改动说明:
- 新增等比例缩放逻辑:通过计算画布与原图的宽高比例,取最小值作为缩放系数,确保图片不会超出画布同时最大化显示
- 使用
Image.Resampling.LANCZOS缩放:这是PIL中画质更优的缩放算法,能更好保留图片细节 - 重新计算偏移量:基于缩放后的图片尺寸计算居中位置,保证图片在画布中居中显示
内容的提问来源于stack exchange,提问作者worte
相关产品推荐
相关产品推荐

