jSignature手写签名

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>手写板签名demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta charset="UTF-8">
<meta name="description" content="overview & stats" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
</head>
<body>
    <p id="signature"></p>
    <p style="text-align: center">
        <b style="color: red">请按着鼠标写字签名。</b>
    </p>
    <input type="button" value="保存" id="yes"/>
    <input type="button" value="下载" id="download"/>
    <input type="button" value="重写" id="reset"/>
    <p id="someelement"></p>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <!--[if lt IE 9]>
        <script src="https://cdn.bootcss.com/jSignature/2.1.3/flashcanvas.js"></script>
    <![endif]-->
    <script src="https://cdn.bootcss.com/jSignature/2.1.3/jSignature.min.js"></script>
    <script>
        $(function() {
            var $sigp = $("#signature");
            $sigp.jSignature(); // 初始化jSignature插件.
            $("#yes").click(function(){
                //将画布内容转换为图片
                var datapair = $sigp.jSignature("getData", "image");
                var i = new Image();
                i.src = "data:" + datapair[0] + "," + datapair[1];
				i.image = datapair[1];
                $(i).appendTo($("#someelement")); // append the image (SVG) to DOM.

				alert(encodeURIComponent(i.image));
				var t = new Date();
                $.ajax({
                    url: "/2.php?t="+t,
                    //dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    data: "{\"image_data\":\"" + encodeURIComponent(i.image) + "\"}",//避免base64长度过大,json传输
                    type: "post",
                    cache: false,
                    success: function (msg) {
                        if (msg.code === 1) {
                            alert("上传成功");
                        } else {
                            alert("上传失败");
                        }
                    }
                });				

            });
            //datapair = $sigp.jSignature("getData","base30");
            //$sigp.jSignature("setData", "data:" + datapair.join(","));
            $("#download").click(function(){
                downloadFile("a.png", convertBase64UrlToBlob($("img").attr("src")));
            });
            $("#reset").click(function(){
                $sigp.jSignature("reset"); //重置画布,可以进行重新作画.
                $("#someelement").html("");
            });
        });
        function downloadFile(fileName, blob){
            var aLink = document.createElement(‘a‘);
            var evt = document.createEvent("HTMLEvents");
            evt.initEvent("click", false, false);//initEvent 不加后两个参数在FF下会报错, 感谢 Barret Lee 的反馈
            aLink.download = fileName;
            aLink.href = URL.createObjectURL(blob);
            aLink.dispatchEvent(evt);
        }
        /**
         * 将以base64的图片url数据转换为Blob
         * @param urlData
         * 用url方式表示的base64图片数据
         */
        function convertBase64UrlToBlob(urlData){
            var bytes=window.atob(urlData.split(‘,‘)[1]);        //去掉url的头,并转换为byte
            //处理异常,将ascii码小于0的转换为大于0
            var ab = new ArrayBuffer(bytes.length);
            var ia = new Uint8Array(ab);
            for (var i = 0; i < bytes.length; i++) {
                ia[i] = bytes.charCodeAt(i);
            }
            return new Blob( [ab] , {type : ‘image/png‘});
        }
    </script>

</body>
</html>

2.php
<?php
	$image_data = json_decode(file_get_contents(‘php://input‘), true); //只能这样接收
	$data = rawurldecode($image_data[‘image_data‘]);
	$file_name = time().‘.png‘; //必须png
	$a = file_put_contents($file_name, base64_decode($data));
?>

  

原文地址:https://www.cnblogs.com/thinkbig/p/11776205.html

时间: 2024-08-30 16:50:11

jSignature手写签名的相关文章

jSignature手写签名的实现

jSignature.js是实现手写签名的插件,由于jSignature.js是基于jQuery的,所以使用时需要先引入jQuery.切记!!! 具体使用方法如下: 第一步,下载jSignature.js,从哪下载呢?https://github.com/brinley/jSignature  感谢GitHub 第二步,引入jQuery 和 jSignature.js 第三步,生成html结构 <div id="signature" style="height: 100

wex5 实战 手写签名与上传

之前做过一个物流演示模块,有一个功能没做完,就是收件人收货后,可以手写签名并上传,替代传统纸张的签名.今天终于做完了. 一 效果演示: 后台图片上传成功 二 设计思路: 运用canvas插件jq-signature,制作手写签名,并通过二进制流方式上传图片 三 代码实现: 1 .下载引入插件jq-signature 手写签名插件,网上有很多,经过多种插件的逐步尝试,只有插件jq-signature达到了我想要的效果; 原因有二:1,支持手机触摸,web,鼠标.其它有的不支持手机触摸. 2,直接转

html5手写签名

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta content="width=device-width,initial-scale=1,maximum-scale=1" name="viewport" /> <title>sxqm</title> <meta name="fo

Android手写开源项目和资料搜集

引言 Android的手写效率一直是件头疼的事情,比如手写效率.笔锋效果.手掌抑制等等,本文搜集了关于手写的开源项目和一些相关的文章资料. 开源项目 1 android-signaturepad 项目地址:android-signaturepad 项目介绍:这是一款银行手写签名的应用,通过event的getHistory方法获取存储在MotionEvent中的历史点,大大提高了手写的流畅度,通过算法实现了笔锋效果. 2  Markers 项目地址:Markers 项目介绍:这是一款带有笔锋效果的

WORD2003电子签名插件(支持手写、签章)

1.引言 WORD电子签名插件,支持手写.本地电子图章.以及网络图章功能.软件使用VC6,以ATL方式编写,软件小巧精致. 这是我学习ATL的成果,学习过程及程序的编写,前前后后共用了一个多月的时间,花了不少的心血.其间遇到了不少困难,终于都一一解决了.这要感谢www.csdn.net上的热心朋友,从他们的BLOG文章中,我获得了不少灵感.现在这个软件基本完成了,全部实现了我自己定的设计需求,自己觉得这个软件还有一定的用处,就把它的测试版发布一下,希望使用者多提宝贵意见.  注:测试版没有任何的

android-------手写签名系统的设计与实现之实现画笔设置

引自:http://www.xuebuyuan.com/1754358.html 既然我们实现了画布和画笔,也实现了手写,为了提高可用性,我们增加了对画笔风格的设置功能,这样就可以根据自己的需要选择画笔的颜色.粗细.风格(铅笔.浮雕.水彩等)效果.今天我们就介绍画笔风格的设置功能的实现过程,先看看效果图:                          一.实现原理: 1.对话款我们用的是popupwindow,不是alertdialog对话框,两者是有区别的:前者是阻塞型,即popupwin

React深入 - 手写redux api

简介: 手写实现redux基础api createStore( )和store相关方法 api回顾: createStore(reducer, [preloadedState], enhancer) 创建一个 Redux store 来以存放应用中所有的 state reducer (Function): 接收两个参数,当前的 state 树/要处理的 action,返回新的 state 树 preloadedState: 初始时的 state enhancer (Function): stor

手写区块链(二):区块链开发中的密码学知识

手写区块链中会采用各种密码学知识 对称加密-加密秘钥和解密秘钥是同一个,缺点是秘钥无法被安全传递,常用的对称加密算法有 DES,3DES(TripleDES),AES 非对称加密-公钥加密,私钥解密 公钥由私钥生成,私钥可以推导出公钥,公钥无法推导出私钥.优点:解决秘钥传输中的安全行问题. 常用算法RSA,ECC 如何验证发送方是正确的 哈希:将一段数据经过计算转换成一段定长数据 不可逆性:几乎无法通过哈希推导出原文 无碰撞性:两个不同的原文hash后值一定不一样 常用算法MD5,SHA256

iOS开发UI基础—手写控件,frame,center和bounds属性

一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: [btn addTarget:self action:@selector(click:) forContro