J'essaye d'implémenter un endpoint back-end Flask où deux images peuvent être téléchargées, un arrière-plan et un premier plan (le premier plan a un fond transparent), et il va coller le premier plan sur le dessus de l'arrière-plan. J'ai le code Python suivant que je l'ai testé avec des fichiers locaux et travaux:Alamofire Télécharge PNG en Flasque avec Fond Blanc
background_name = request.args.get("background")
overlay_name = request.args.get("overlay")
output_name = request.args.get("output")
background_data = request.files["background"].read()
overlay_data = request.files["overlay"].read()
background = Image.open(BytesIO(background_data))
overlay = Image.open(BytesIO(overlay_data))
background = background.convert("RGBA")
overlay = overlay.convert("RGBA")
overlay = resize_image(overlay, background.size)
background.paste(overlay, (0, 0, background.size[0], background.size[1],), overlay)
background.save(output_name, "PNG")
Cependant, lorsque je tente de télécharger les mêmes images par Alamofire et le code suivant:
Alamofire.upload(multipartFormData: { formData in
formData.append(bgData, withName: "background", fileName: "background.jpg", mimeType: "image/jpeg")
formData.append(fgData, withName: "foreground", fileName: "foreground.png", mimeType: "image/png")
}, to: "http://localhost:8080/image_overlay?background=background%2Ejpg&overlay=overlay%2Epng&output=result%2Epng", encodingCompletion: { result in
switch result {
case .success(let upload, _, _):
upload.validate().responseJSON(completionHandler: { response in
switch response.result {
case .success(let value): print("success: \(value)")
case .failure((let error)): print("response error \(error)")
}
})
case .failure(let error):
print("encoding error \(error)")
}
})
Le premier plan apparaît avec un fond blanc au lieu d'un fond transparent et l'image résultante est juste au premier plan avec un fond blanc. Comment puis-je demander à Alamofire d'envoyer la transparence?
EDIT: J'ai essayé de traduire ceci à une demande de cURL et cela fonctionne comme prévu. J'ai utilisé nc-l localhost 8080 pour voir la requête complète, et il semble qu'avec l'image de premier plan, même si le Content-Type était réglé sur "application/octet-stream", la ligne suivante était "? PNG". Cette ligne n'était pas présente à la demande d'Alamofire. Comment puis-je obtenir la demande de reconnaître l'image en tant que PNG?
Oui, transformer un png en jpg provoquera cela. –
Qui aurait pensé! – genghiskhan