我正在尝试获取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>
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
而这就是我被困住的地方.我无法弄清楚如何获取base64编码的数据网址以使用PIL将图像加载到可用的形式.
谢谢!
编辑:这是底部评论的代码:
>>> d
'data:image/png;base64,iVBORw0K'
>>> d.strip('data:image/png;base64,')
'VBORw0K'
Run Code Online (Sandbox Code Playgroud) 我试图将默认值Report的费用基于父模型的属性.我不想这样做save(),因为如果他们选择在保存之前覆盖该值,则需要向用户显示该字段.
以下是我尝试过的三种方法,除了只传递函数指针(即没有()).我跑的时候会出错python manage.py shell.
#1
from django.db import models
class Job(models.Model):
veryImportant = models.IntegerField()
def get_fee(self):
return 2 * self.veryImportant
class Report(models.Model):
job = models.ForeignKey(Job)
overridableFee = models.DecimalField(default=job.get_fee(), max_digits=7, decimal_places=2)
#gives...
#AttributeError: 'ForeignKey' object has no attribute 'get_fee'
#2
from django.db import models
class Job(models.Model):
veryImportant = models.IntegerField()
class Report(models.Model):
job = models.ForeignKey(Job)
overridableFee = models.DecimalField(default=self.set_fee(), max_digits=7, decimal_places=2)
def set_fee(self):
overridableFee = 2 * self.job.veryImportant
#gives...
#NameError: name 'self' is not defined …Run Code Online (Sandbox Code Playgroud)