Chargez une toile html5 dans une image PIL avec Django

J'essaie d'obtenir le contenu d'une toile html5 et de la transmettre à mon serveur django où elle sera ensuite manipulée avec PIL et enregistrée en PNG. Voici ce que j'ai jusqu'ici:

À partir du formulaire HTML, l'utilisateur clique sur le bouton "mise à jour", le contenu de la toile – avec canvas.toDataURL () – est déversé dans une zone de texte qui est soumise via un formulaire POST. Finalement, cela sera automatique, mais pas pour le moment.

<input type="text" id="canvasData" name="canvasData"/> <input type='button' value="update" onclick='jscript:updateData();'> <canvas id="sketch"></canvas> <script type="text/javascript"> function jscript:updateData() { $('#canvasData')[0].value = $('canvas')[0].toDataURL(); } </script> 

The canvasData se présente sous la forme de 'data: image / png; base64, iVBORw0KGgoAAAA … etc … =' lorsqu'il est envoyé. Ensuite, je m'en occupe dans django:

 from PIL import Image ... canvasData = request.POST.get('canvasData', '') im = Image.somehowLoad(canvasData) ... im.save('canvas.png') 

Et c'est là que je suis bloqué. Je ne peux pas comprendre comment obtenir l'URL de données codées en base64 pour charger l'image sous une forme utilisable avec PIL.

Merci!

Edit: voici le code pour le commentaire inférieur:

 >>> d 'data:image/png;base64,iVBORw0K' >>> d.strip('data:image/png;base64,') 'VBORw0K' 

 import re datauri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' imgstr = re.search(r'base64,(.*)', datauri).group(1) output = open('output.png', 'wb') output.write(imgstr.decode('base64')) output.close() 

Ou si vous devez le charger dans PIL:

 import cStringIO tempimg = cStringIO.StringIO(imgstr.decode('base64')) im = Image.open(tempimg)