我有一个 Flask 应用程序,我试图对从 Flask-WTF -> Flask-Uploads 接收的文件执行一些 PIL/Pillow 操作,但是当我保存文件时,我缺少字节并且图像不是有效的。
似乎即使在没有额外 PIL 操作的情况下制作图像副本也会导致原始上传被破坏:
@sights_blueprint.route('/add', methods=['GET', 'POST'])
def add_image():
form = AddImageForm()
if request.method == 'POST':
if form.validate_on_submit():
# uploaded file
f = form.sights_image.data
filename = secure_filename(f.filename)
# PIL open + copy
img = Image.open(f).copy()
# save original file
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
结果是:
original_file: 4622336 bytes
saved_file: 886784 bytes
如果我删除img = Image.open(f).copy()
上传的文件正确保存。
如果我只用 PIL 打开图像:
# PIL open (no copy)
img = Image.open(f)
该文件也将正确保存。
但是,如果我执行任何操作、复制或其他操作,生成的保存文件会丢失字节和无效图像。
我怎样才能实现这个理想的工作流程?