我正在编写一个小型Flask应用,用于识别手写数字(0-9)。我已经编写了几乎所有元素(机器学习模型、Web应用等),但在捕获图像(使用Canvas绘制)方面遇到了问题,如下所示:
我想获取图像并将其保存到临时文件中。我熟悉Python,但从未使用过JavaScript,而JavaScript是使用Canvas所必需的。
HTML:
<form method="post" action="{{url_for('main.image')}}"> <button name="img" onclick="drawDataURIOnCanvas();">获取png</button></form>
JS:
function InitThis() { .... } function Draw(x, y, isDown) { .... function drawDataURIOnCanvas() { var element = document.createElement('a'); element.setAttribute('href', document.getElementById('Canvas').toDataURL('image/jpeg')); element.setAttribute('download', 'chart.jpeg'); element.style.display = 'none'; document.body.appendChild(element); element.click(); }
函数drawDataURIOnCanvas()
使用浏览器保存管理器保存图像,但我希望将其保存到临时文件中,并在稍后使用该图像。
回答:
遗憾的是,由于安全考虑,浏览器不允许你以编程方式将文件保存到用户的文件系统中。因为这是针对Flask应用程序的,你应该从<canvas>
标签中读取图像信息,并通过XHR/AJAX或标准的<form>
将图像信息直接发送到应用。这假设你是临时写入,以便Flask可以从磁盘读取它。
如果你绝对需要使用临时文件来实现这个功能,你可以通过编写浏览器插件/扩展来绕过这一限制,但在Chrome的情况下,你可能需要结合使用扩展和应用来获得必要的文件访问权限。