表单提交使用 SVG 捕获的签名

Posted

技术标签:

【中文标题】表单提交使用 SVG 捕获的签名【英文标题】:Form submit a signature captured using SVG 【发布时间】:2011-11-23 05:53:38 【问题描述】:

我在这里遇到了@heycam 捕获的 SVG 签名示例:

Capture Signature using html5 and iPad 示例:http://mcc.id.au/2010/signature.html

比我之前见过的任何示例都简单得多,并且可以与鼠标触摸一起使用!

但是我如何将结果作为表单的一部分提交?

我想我希望它作为 base64 字符串提交,但我对其他选项持开放态度...

对于奖励积分...有什么方法可以从提交的数据中去除黄色背景和线条?

谢谢!

【问题讨论】:

我是 base64 的粉丝,我没有看到更好的解决方案... 输出路径中不包含黄色背景和虚线,它们是包含的signature.svg的元素。签名路径存储在 svg 元素 <path id='p'> 的 d 属性中。加载页面后,打开 Firebug 并折叠打开 SVG 元素。绘制一个签名,你会看到 d 属性被填充。 【参考方案1】:

@heycam 的基于 SVG 的 sig capture hack 在技术上很棒,如果浏览器对 SVG 的有限支持不会吓到你,无论如何,调用 iframe,提取源并将其作为文本推送到服务器端:

var strokes = window.frames[0].getSignature()

获取字符串行:

"M182,46 M141,30 L136,34 L136,36 L134,40 L134,47 L135,52 L146,64"

像这样将它推入 SVG 模板:

var svgstring = '<svg xmlns="http://www.w3.org/2000/svg"  >' +
    '<path stroke="navy" stroke- fill="none" d='+ strokes +'/></svg>'

并在隐藏的输入字段中将其推送到服务器。

但是,有一个更简单的方法:

http://willowsystems.github.com/jSignature/

它适用于几乎所有浏览器(移动和桌面),并且可以导出漂亮、去噪、平滑的曲线 SVG。

【讨论】:

【参考方案2】:

如果你看他的代码,你可以看到他是如何将签名提取到 div 标签中的。

内联 SVG 中有一个脚本,可在触发事件时将内容记录到“signaturePath”变量中。然后,他在 iframe 中调用“getSignature”以返回路径。为了提取路径,提交表单时,您需要调用该函数并创建一个隐藏的输入标记,该标记具有返回的路径值。您将在服务器端提取提交的值(即路径)。您可以稍后使用保存的路径(不会有黄色背景)重新创建 SVG。

【讨论】:

以上是关于表单提交使用 SVG 捕获的签名的主要内容,如果未能解决你的问题,请参考以下文章

提交表单时捕获 onClick 事件

捕获太长的表单提交

如果模态关闭并重新打开或验证捕获丢失的输入,则使用 .one 提交的模态表单提交多个

表单提交事件未捕获 OnSelectedIndexChanged?

为啥表单提交没有捕获我在输入标签中设置的只读默认值?

表单提交后如何捕获 Rails 控制器操作完成