将 HTML5 画布图像保存到数据库

Posted

技术标签:

【中文标题】将 HTML5 画布图像保存到数据库【英文标题】:Save an HTML5 canvas image to a database 【发布时间】:2017-04-22 18:19:41 【问题描述】:

如何将画布图像保存到数据库中?

我有一个带有保存按钮的签名板,它会打开一个新窗口并在单击时显示图像。我想更改按钮的行为,以便将图像保存到数据库以便稍后显示。

我在获取数据 URL 以发送到下一页时遇到问题,我可以在下一页处理它以将其插入数据库。

我正在使用 phpMyAdmin。

这是index.html 文件:

<body onselectstart="return false"> 

  <div id="signature-pad" class="m-signature-pad">
    <div class="m-signature-pad--body" >
      <canvas>
        
      </canvas>
    </div>
    <div class="m-signature-pad--footer">
      <div class="description">Sign above</div>
      <button type="button" class="button clear" data-action="clear">Clear</button>
      <button type="button" class="button save" data-action="save">Save</button>
    </div>
  </div>

  <script src="js/signature_pad.js"></script>
  <script src="js/app.js"></script>
</body>`

这里是app.js:

var wrapper = document.getElementById("signature-pad"),
    clearButton = wrapper.querySelector("[data-action=clear]"),
    saveButton = wrapper.querySelector("[data-action=save]"),
    canvas = wrapper.querySelector("canvas"),
    signaturePad;

// Adjust canvas coordinate space taking into account pixel ratio,
// to make it look crisp on mobile devices.
// This also causes canvas to be cleared.
function resizeCanvas() 
    // When zoomed out to less than 100%, for some very strange reason,
    // some browsers report devicePixelRatio as less than 1
    // and only part of the canvas is cleared then.
    var ratio =  Math.max(window.devicePixelRatio || 1, 1);
    canvas.width = canvas.offsetWidth * ratio;
    canvas.height = canvas.offsetHeight * ratio;
    canvas.getContext("2d").scale(ratio, ratio);


window.onresize = resizeCanvas;
resizeCanvas();

signaturePad = new SignaturePad(canvas);

clearButton.addEventListener("click", function (event) 
    signaturePad.clear();
);

saveButton.addEventListener("click", function (event) 
    if (signaturePad.isEmpty()) 
        alert("Please provide signature first.");
     else 
        window.open(signaturePad.toDataURL());
    
);

Here is a JSfiddle

【问题讨论】:

对不起。但这就是我不知道如何开始的问题。我刚开始学习javascript 保存到数据库(通常)是在服务器上完成的,因此它与 JavaScript 无关,需要服务器端的一些代码。如果您是 JavaScript 新手,我建议您尝试一些更简单的方法,因为 SO 不是提出此类问题的好地方。 @ftanis 如果我将window.open(signaturePad.toDataURL()); 更改为window.open("newpage.php?image="signaturePad.toDataURL()); 并使用$_GET[image] 并将其插入数据库你认为它会工作吗? 理论上可以,但是有几个注意事项(最值得注意的是,GET 请求的大小是有限制的,所以我建议您改用POST)。但是,这仍然需要通过 PHP 存储在数据库中,这超出了 JavaScript 的范围。 请阅读How to Ask。关键词:“搜索和研究”和“解释......任何阻碍你自己解决的困难”。 【参考方案1】:

刚刚找到了这个问题的答案。我想我应该给出答案。其他人可能有同样的问题。

将 DataURL 发送到下一页。我只是改变我的代码

来自

    saveButton.addEventListener("click", function (event) 
    if (signaturePad.isEmpty()) 
        alert("Please provide signature first.");
     else 
        window.open(signaturePad.toDataURL());
    
);

saveButton.addEventListener("click", function post (event) 

    if (signaturePad.isEmpty()) 
        alert("Please provide signature first.");
     else 
        document.body.innerHTML += '<form id="form" action="newpage.php" method="post"><input type="hidden" name="image" value="'+signaturePad.toDataURL()+'"></form>';
        document.getElementById("form").submit();

    
  );

刚刚在 javascript 中添加了一个表单和隐藏的输入。现在可以使用$_POST检索到其他页面

【讨论】:

以上是关于将 HTML5 画布图像保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

保存画布图像(将数据字符串发布到 PHP)

如何将画布保存为html5中的图像?

将 html5 画布图像保存在本地硬盘上

如何将 HTML5 Canvas 保存为服务器上的图像?

以更高分辨率保存 html5 画布图像

Amazon S3 图像,无法使用 html5 画布保存,出现受污染的画布错误