jSignature网页手写签名

一、效果图

这里写图片描述
  注意:1、CSS样式自己调,这里写的很简陋。
     2、单击下载,并不是下载图片,而是保存到后台。
     3、注意js的引用。

二、前端

<!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" /><script src="./js/jquery-2.0.3/jquery-2.0.3.min.js"></script><script src="./js/jSignature/jSignature.min.js"></script><script>$(function() {var $sigdiv = $("#signature");$sigdiv.jSignature(); // 初始化jSignature插件-属性用","隔开// $sigdiv.jSignature({'decor-color':'red'}); // 初始化jSignature插件-设置横线颜色// $sigdiv.jSignature({'lineWidth':"6"});// 初始化jSignature插件-设置横线粗细// $sigdiv.jSignature({"decor-color":"transparent"});// 初始化jSignature插件-去掉横线// $sigdiv.jSignature({'UndoButton':true});// 初始化jSignature插件-撤销功能// $sigdiv.jSignature({'height': 100, 'width': 200}); // 初始化jSignature插件-设置书写范围(大小)$("#yes").click(function(){//将画布内容转换为图片var datapair = $sigdiv.jSignature("getData", "image");$("#images").attr('src','data:' + datapair[0] + "," + datapair[1]);});$("#download").click(function(){var src_data = $("#images").attr('src');// console.log(src);if(src_data){$.ajax({type:'post',url:'./base64.php',data:{src_data:src_data},async:false,success:function(data){// console.log(data);if(data){alert(data);// alert('生成签名成功!');}else{alert('生成失败!');}}});}else{alert('图片不能为空!');return false;}});$("#reset").click(function(){$("#signature").jSignature("reset"); //重置画布,可以进行重新作画$("#images").attr('src','');});});</script>
</head>
<body><div id="signature"></div><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"/><div id="someelement"><img src="" id="images"></div>
</body>
</html>

三、后台

<?php
/*  base64格式编码转换为图片并保存对应文件夹 */  
$base64_content = $_POST['src_data'];
// echo $base64_content;die;//截取数据为数组
$base64_content= explode(',',$base64_content); //生成目录:demo所在根目录下
// $new_file = "./".date('Ymd',time())."/";  
$new_file = date('Ymd',time())."/";  
if(!file_exists($new_file)){  //检查是否有该文件夹,如果没有就创建,并给予最高权限  mkdir($new_file, 0700);  
}//文件后缀名
$type = 'png';
//生成文件名:相对路径
$new_file = $new_file.time().".$type";//转换为图片文件
if (file_put_contents($new_file,base64_decode($base64_content[1]))){echo $new_file;  
}else{ return false;  
}  ?>

四、下载手写签名图片

1、前端代码

$.ajax({type:'post',url:'./base64.php',data:{src_data:src_data},async:false,dataType:'json',success:function(data){if(data){//跳转下载链接window.location.href = data.url;// alert('生成签名成功!');}else{alert('生成失败!');}}
});

2、后台base64.php代码

<?php
header('Content-Type:text/html,charset=utf-8');
/*  base64格式编码转换为图片并保存对应文件夹 */  
$base64_content = $_POST['src_data'];
// echo $base64_content;die;//截取数据为数组
$base64_content= explode(',',$base64_content); //生成目录:demo所在根目录下
// $new_file = "./".date('Ymd',time())."/";  
$new_file = date('Ymd',time())."/";  
if(!file_exists($new_file)){  //检查是否有该文件夹,如果没有就创建,并给予最高权限  mkdir($new_file, 0700);  
}//文件后缀名
$type = 'png';
//生成文件名:相对路径
$new_file = $new_file.time().".$type";//转换为图片文件并返回图片链接
if (file_put_contents($new_file,base64_decode($base64_content[1]))){$url = $_SERVER['HTTP_REFERER'].'/download.php?url='.$new_file;$result['url'] = $url;$result['status'] = 1;echo json_encode($result);die;		
}else{$result['status'] = 0;echo json_encode($result);die; 
} 

3、后台download.php代码

<?phpheader('Content-Type:text/html,charset=utf-8');//下面是输出下载;// ob_end_clean();//清除缓存以免乱码出现// echo 1111;die;$new_file = $_GET['url'];// var_dump($new_file);die;header ( "Cache-Control: max-age=0" );header ( "Content-Description: File Transfer" );header ( 'Content-disposition: attachment; filename='.basename($new_file)); //文件名header ( "Content-Type: application/png" ); //文件格式:pngheader ( "Content-Transfer-Encoding: binary" ); // 告诉浏览器,这是二进制文件header ( 'Content-Length: ' . filesize ( $new_file ) ); //告诉浏览器,文件大小@readfile ( $new_file );//输出文件;
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman上传图片时已经添加cookie,但仍显示未登陆

postman上传图片时&#xff0c;已经添加过cookie&#xff0c;但是返回的结果是用户未登陆&#xff0c;如下图所示&#xff1a; 我的解决办法是&#xff1a;清楚cookie code中的cookie 最终的结果如下&#xff1a;成功 转载于:https://www.cnblogs.com/1510152012huang/p/102825…

关于Oracle数据库导入数据显示中文乱码

一、遇到的问题 问题一&#xff1a;某xxxx.sql文件&#xff0c;里面都是insert语句&#xff0c;并且文本编辑器打开文件查看&#xff0c;里面待插入的中文数据显示正常&#xff0c;但是通过命令行&#xff0c;使用“xxxx.sql”导入数据库后&#xff0c;发现数据库中的中文数据都…

MySQL日期与时间函数

MySQL日期与时间函数 MySQL服务器中的三种时区设置&#xff1a;   ①系统时区—保存在系统变量system_time_zone   ②服务器时区—保存在全局系统变量global.time_zone   ③每个客户端连接的时区—保存在会话变量session.time_zone 注意&#xff1a;   客户端时区…

Docker:单机编排工具docker-compose [十二]

一、docker-compose的安装 1、安装 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y python2-pip pip install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose2、检查是否安装成功 docker-compose -v 二、docke…

HTML DOM文档对象查找元素的方法

一、HTML DOM 节点 在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点: 文档是一个文档节点。所有的HTML元素都是元素节点。所有 HTML 属性都是属性节点。文本插入到 HTML 元素是文本节点。注释是注释节点。 二、Document 对象 当浏览器载入 HTML 文档, 它就会…

快速排序(C语言)

快速排序 快速排序是一种不稳定排序&#xff0c;它的时间复杂度为O(nlgn)&#xff0c;最坏情况为O(n2)&#xff1b;空间复杂度为O(nlgn)。 这种排序方式是对于冒泡排序的一种改进&#xff0c;它采用分治模式&#xff0c;将一趟排序的数据分割成独立的两部分&#xff0c;其中一…

Apache配置多个监听端口和访问网站的方法

一个apache服务器的vhost.conf配置文件可以设置Apache监听多个端口&#xff0c;打开Apache的配置文件httpd.conf&#xff0c;在 Listen 80 下面添加多个监听端口如&#xff1a; Listen 8010 Listen 8020 Listen 8030 这样就在vhosts.conf配置文件中增加了8010、8020和8030端…

图的邻接矩阵(C语言)

邻接矩阵 无向图和有向图在邻接矩阵中的表示方法&#xff1a; 无向图和有向图大同小异&#xff0c;在这里只以无向图为例&#xff0c;代码部分通过简单调整即可对应编译有向图 邻接矩阵数据类型定义 #define MaxVertices 100 //定义最大容量 typedef struct{ //包含权的邻…

MySQL安装成功后dos命令行设置密码

我在windows7上安装好MySQL数据库后&#xff0c;添加了MySQL的安装目录D:\wamp\MySQL\bin;到环境变量中&#xff0c;这样就可以在任何目录下使用mysql。为了安全性考虑&#xff0c;需要设置MySQL数据库的密码。通过dos命令行设置的方式如下&#xff1a; 一、进入dos命令行 按…

图的邻接表表示法(C语言)

邻接表 邻接表数据结构类型如下&#xff1a; #define MaxVertices 100 typedef struct node{ //边表 int adjvex;node* next; }EdgeNode; typedef struct{ //顶点表 int vertex; EdgeNode* edgenext; }VertexNode; typedef VertexNode AdjList[MaxVertices];//…

最小生成树构造算法--Prim算法,Kruskal算法(C语言)

最小生成树 最小生成树&#xff08;minimum spanning tree&#xff09;是由n个顶点&#xff0c;n-1条边&#xff0c;将一个连通图连接起来&#xff0c;且使权值最小的结构。 最小生成树可以用Prim&#xff08;普里姆&#xff09;算法或kruskal&#xff08;克鲁斯卡尔&#xff…

屏蔽烦人的百度搜索热点

开发时&#xff0c;在百度上搜索一些资料时&#xff0c;总是不经意看到百度搜索热点的一些新闻&#xff0c;然后经不住诱惑的标题就不经意间点了进去&#xff0c;然后就是连锁反应了。。等再次回到开发时已经是半小时之后的事了。又要把想要的东西重新捋一遍&#xff0c;导致开…

矩阵在竞赛中的应用

矩阵乘法代码&#xff1a; struct matrix {int n, m;int a[100][100]; }; // A.m B.n matrix matrix_mul(matrix A, matrix B) {matrix C;C.n A.n;C.m B.m;for (int i 0; i < A.n; i) {for (int j 0; j < B.m; j) {C.a[i][j] 0;for (int k 0; k < A.m; k) {C.a…

连通图遍历策略之广度优先搜索(C语言)

广度优先搜素&#xff08;BFS&#xff09; 广度优先搜索(又称宽度优先搜索)算法是最简便的图的搜索算法之一&#xff0c;该算法属于一种盲目搜寻法&#xff0c;目的是系统地展开并检查图中的所有节点&#xff0c;以找寻结果。换句话说&#xff0c;它并不考虑结果的可能位置&am…

多条件组合查询

一、效果图 二、前端代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>Jquery分类</title> <script src"http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></sc…

“三次握手,四次挥手”你真的懂吗?

记得刚毕业找工作面试的时候&#xff0c;经常会被问到&#xff1a;你知道“3次握手&#xff0c;4次挥手”吗&#xff1f;这时候我会“胸有成竹”地“背诵”前期准备好的“答案”&#xff0c;第一次怎么怎么&#xff0c;第二次……答完就没有下文了&#xff0c;面试官貌似也没有…

连通图遍历策略之深度优先搜索(C语言)

深度优先搜素&#xff08;DFS&#xff09; 深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中&#xff0c;当一个超链被选择后&#xff0c;被链接的HTML文件将执行深度优先搜索&#…

单源最短路径之迪杰斯特拉算法(C语言)

Dijkstra&#xff08;迪杰斯特拉&#xff09;算法 采用广度优先搜索思想&#xff0c;对有向赋权图寻找最短路径。 该算法对于不含负权的有向图来说&#xff0c;是目前已知的最快的单源最短路径算法。 时间复杂度&#xff1a;O&#xff08;n^2&#xff09; 基本原理&#xf…

Mybatis主线流程源码解析

Mybatis的基础使用以及与Spring的相关集成在官方文档都写的非常详细&#xff0c;但无论我们采用xml还是注解方式在使用的过程中经常会出现各种奇怪的问题&#xff0c;需要花费大量的时间解决。 抽空了解一下Mybatis的相关源码还是很有必要。 先来看一个简单的Demo&#xff1a; …

动态规划之背包问题(C语言)

动态规划 动态规划&#xff08;英语&#xff1a;Dynamic programming&#xff0c;简称DP&#xff09;是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题 动态规划思想大致上为&#xff1a;若要解一…