使用PIL调整图片为244×244尺寸,如何拉伸填充消除黑边?
图片拉伸填充实战方案
核心修改逻辑
你当前代码出现黑边的核心原因是存在冗余逻辑:已经调用resize方法把原图缩放到了244*244的目标尺寸,后续又新建空白画布、偏移粘贴的操作完全多余,就是这部分操作导致了黑边或画面截断。要实现拉伸填满效果,直接去掉冗余逻辑即可。
修改后可运行完整代码
import os import uuid from PIL import Image path = "data/oyaku_don_source/" dirs = os.listdir(path) final_size = 244 def resize_stretch_fill(): for item in dirs: # 跳过macOS系统缓存文件 if item == '.DS_Store': continue file_path = os.path.join(path, item) if os.path.isfile(file_path): im = Image.open(file_path) # 直接拉伸到目标尺寸,无需额外等比计算和画布操作 # 旧版本Pillow(9.0及以下)可将Image.Resampling.LANCZOS替换为Image.ANTIALIAS im = im.resize((final_size, final_size), Image.Resampling.LANCZOS) # 直接保存处理后的图片 im.save(f'data/Oyaku_Don/{str(uuid.uuid4().fields[-1])[:5]}.jpg', 'JPEG', quality=90) if __name__ == "__main__": # 自动创建目标保存目录,不存在时自动生成不会报错 os.makedirs('data/Oyaku_Don/', exist_ok=True) resize_stretch_fill()
额外优化说明
- 路径拼接改用
os.path.join方法,适配不同操作系统的路径格式,避免Windows下路径斜杠报错 - 新增目录自动创建逻辑,不用提前手动新建保存目录
- 调整了缩放算法的写法,兼容新旧版本的Pillow库
内容的提问来源于stack exchange,提问作者Detective merry
相关产品推荐
相关产品推荐

