J'ai une application Flask où j'essaie d'effectuer des opérations PIL/Pillow sur un fichier reçu de Flask-WTF -> Flask-Uploads, mais lorsque je sauvegarde le fichier, il me manque des octets et l'image n'est pas valide.Octets manquants après avoir fait une copie de l'image PIL à partir des données Flask-Uploads
Il semble même faire une copie de l'image sans opérations LIP supplémentaires résultats en corrompant le téléchargement d'origine:
@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))
Résultats dans:
original_file: 4622336 bytes
saved_file: 886784 bytes
Si je supprime img = Image.open(f).copy()
le fichier téléchargé est enregistré correctement.
Si je ne ouvrir l'image avec PIL:
# PIL open (no copy)
img = Image.open(f)
Le fichier sera également enregistrer correctement.
Mais si j'effectue une opération, une copie ou autre, le fichier enregistré résultant manque des octets et une image non valide.
Comment puis-je réaliser ce flux de travail?
Je suppose que 'f' est un flux qui ne peut être lu qu'une seule fois. 'Image.open' ne lit pas dans l'image immédiatement, mais le' copy' le force à être consommé. –