如何将动态生成的图像保存到数据库

时间:2012-12-07 16:07:10

标签: php javascript canvas

我的网页上有一个画布,允许用户签名(使用jSignature)。我使用canvasg将其转换为png客户端,现在需要将其提交给Quickbase。我知道如何将图片上传到quickbase,但我的问题是从index.html页面的客户端代码到submit_signature.php中的服务器端代码获取文件。

        $("#save").click(function(){
          var datapair = sigdiv.jSignature("getData", "svg");
          var i = new Image();
          i.src = "data:" + datapair[0] + "," + datapair[1];
          $(i).appendTo($("#outputSvg"));

          var canvas = document.getElementById("canvas");

          canvg(canvas, datapair[1]);

          var img = canvas.toDataURL("image/png");
          $("#outputRaster").append("<img src='"+img+"' name='image' />");
        });

jsFiddle

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:3)

jSignature的作者建议您不要将其另存为图像(http://willowsystems.github.com/jSignature/#/about/)。

  

我知道你很想从jSignature那里得到“图像”,但是,请控制自己,远离它。相反,考虑捕获“base30”或“svg”数据,并在后期制作,服务器端增强+渲染。

他在下面陈述了一些理由。如果这些原因对你有意义并且你可以使用ImageMagick,你可以考虑使用jSignature'svg插件并通过AJAX将结果发布到你的服务器。然后你可以使用这个问题的答案:Rendering an SVG file to a PNG or JPEG in PHP

如果您必须将图像上传为base64编码的字符串以插入数据库,并且其他选项不可用,则jSignature有一个图像导出插件,可以将其转换为base64。

  

默认(仅限EXPORT)(BITMAP)数据格式与在不使用参数调用getData时在早期版本中生成的输出格式jSignature兼容。 $ default.jSignature(“getData”)默认情况下默认情况下会调用“默认”(显然)。数据格式是由Canvas本地生成的 - data-url-formatted,base64编码(可能是PNG)位图数据,如下所示:data:image / png; base64,i1234lkj123; k4; l1j34l1kj3j ...此导出调用返回单个data-url格式的字符串。

答案 1 :(得分:1)

我个人会使用js来post将图像添加到PHP页面。 然后,该页面将图像保存到目录中,并在数据库中插入对该文件的引用。

永远不要将图像直接存储在数据库中。这不仅占用了大量空间,而且还会造成大幅减速。

希望这有帮助。