使用 Django 将 html5 canvas 加载到 PIL 图像中
我试图获取 html5 画布的内容并将其传递到我的 django 服务器,然后使用 PIL 对其进行操作并保存为 PNG。这是我到目前为止所得到的:
从 HTML 表单中,用户单击“更新”按钮,画布的内容 - 使用 canvas.toDataURL() - 被转储到通过 POST 表单提交的文本框中。最终这将是自动的,但目前还不是。
<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>
发送过来时,canvasData 的格式为“data:image/png;base64,iVBORw0KGgoAAAA...etc...=”。然后我在 django 中处理它:
from PIL import Image
...
canvasData = request.POST.get('canvasData', '')
im = Image.somehowLoad(canvasData)
...
im.save('canvas.png')
这就是我陷入困境的地方。我不知道如何获取 base64 编码的数据 url,以使用 PIL 将图像加载到可用的形式。
谢谢!
编辑:这是底部评论的代码:
>>> d
'data:image/png;base64,iVBORw0K'
>>> d.strip('data:image/png;base64,')
'VBORw0K'
I'm trying to get the contents of an html5 canvas and pass it to my django server, where it will then be manipulated with PIL and saved as a PNG. Here's what I have so far:
From the HTML form, the user clicks the "update" button, the canvas's contents
- with canvas.toDataURL() - gets dumped into a text box that is submitted via a POST form. Eventually this will be automatic, but not for now.
<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 is in the form of 'data:image/png;base64,iVBORw0KGgoAAAA...etc...=' when it gets sent over. Then I deal with it in django:
from PIL import Image
...
canvasData = request.POST.get('canvasData', '')
im = Image.somehowLoad(canvasData)
...
im.save('canvas.png')
And this is where i'm stuck. I can't figure out how to get the base64-encoded data url to load up the image into a usable form with PIL.
Thanks!
edit: here's the code for the bottom comment:
>>> d
'data:image/png;base64,iVBORw0K'
>>> d.strip('data:image/png;base64,')
'VBORw0K'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
或者如果您需要将其加载到 PIL 中:
or if you need to load it into PIL :
HTML:
Javascript:
Django POST 请求视图:
增加设置中的最大 POST 大小(例如:~20 MB):
HTML:
Javascript:
Django POST Request View:
Bump up the maximum POST size in your settings (example: ~20 MB):
在 2019 年,我用 python3 尝试了 Acorn 答案,然后得到了
错误“str”对象没有属性“解码”
所以我做了一些搜索并调整了代码,它在这里工作了
In 2019 with python3 i tried Acorn answer, and i got
Error 'str' object has no attribute 'decode '
So i did some searching and adjusted the code and it worked here it is
适用于 Django 3.0 和 python 3.7
html文件中的代码(在django中称为模板)
在 JavaScript 文件中
在 Django 的views.py 文件中
For Django 3.0 and python 3.7
code in the html file (which are called templates in the django)
in the javascript file
in the views.py file for Django