base64+jfinal+canvas实现在线电子签名功能
来源:互联网 发布:知恩感恩手抄报 编辑:程序博客网 时间:2024/04/26 14:16
思路就是 将canvas 转化为base64编码传给后台,然后后台将编码还原为图片,下面是完整代码
前端页面代码
<!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>电子签名测试</title> <style type="text/css"> #canvas { border: 1px solid #ccc; } </style> </head> <body> <div id="canvasDiv"></div> <button id="btn_clear">Clear</button> <button id="btn_submit">Submit</button> <form action="${BASE_PATH}/web/regist/Base64ToImages" method="post"><input type="hidden" name="imageData" id="imageData" /></form> <img id="tempImage" src="" style="display: none;" alt="签名" /> <script language="javascript"> var canvasDiv = document.getElementById('canvasDiv'); var canvas = document.createElement('canvas'); var canvasWidth = 600, canvasHeight = 400; var point = {}; point.notFirst = false; canvas.setAttribute('width', canvasWidth); canvas.setAttribute('height', canvasHeight); canvas.setAttribute('id', 'canvas'); canvasDiv.appendChild(canvas); if (typeof G_vmlCanvasManager != 'undefined') { canvas = G_vmlCanvasManager.initElement(canvas); } var context = canvas.getContext("2d"); canvas.addEventListener("mousedown", function(e) { var mouseX = e.pageX - this.offsetLeft; var mouseY = e.pageY - this.offsetTop; paint = true; addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop); redraw(); }); canvas.addEventListener("mousemove", function(e) { if (paint) { addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true); redraw(); } }); canvas.addEventListener("mouseup", function(e) { paint = false; }); canvas.addEventListener("mouseleave", function(e) { paint = false; }); var clickX = new Array(); var clickY = new Array(); var clickDrag = new Array(); var paint; function addClick(x, y, dragging) { clickX.push(x); clickY.push(y); clickDrag.push(dragging); } function redraw() { //canvascanvas.width = canvas.width; // Clears the canvas context.strokeStyle = "#df4b26"; context.lineJoin = "round"; context.lineWidth = 5; while (clickX.length > 0) { point.bx = point.x; point.by = point.y; point.x = clickX.pop(); point.y = clickY.pop(); point.drag = clickDrag.pop(); context.beginPath(); if (point.drag && point.notFirst) { context.moveTo(point.bx, point.by); } else { point.notFirst = true; context.moveTo(point.x - 1, point.y); } context.lineTo(point.x, point.y); context.closePath(); context.stroke(); } /* for(var i=0; i < clickX.length; i++) { context.beginPath(); if(clickDrag[i] && i){ context.moveTo(clickX[i-1], clickY[i-1]); }else{ context.moveTo(clickX[i]-1, clickY[i]); } context.lineTo(clickX[i], clickY[i]); context.closePath(); context.stroke(); } */ } var clear = document.getElementById("btn_clear"); var submit = document.getElementById("btn_submit"); clear.addEventListener("click", function() { canvas.width = canvas.width; }); submit.addEventListener("click", function() { var image = document.getElementById("tempImage"); image.src = canvas.toDataURL("image/png"); document.getElementById("imageData").value = canvas .toDataURL("image/png"); image.style = "display:block;"; alert(canvas.toDataURL("image/png")); document.forms[0].submit(); }); </script> </body> </html>
base64编码转化成图片代码
/** * * @Description * @author GuoMing * @date 2016年7月14日 上午11:14:10 * @param imgStr base64字符串 * @param imgFilePath 保存的图片路径+名称 * @return */public static boolean GenerateImage(String imgStr, String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片 if (imgStr == null) // 图像数据为空 return false; BASE64Decoder decoder = new BASE64Decoder(); try { imgStr=imgStr.replace(" ", "+");// Base64解码 byte[] bytes = decoder.decodeBuffer(imgStr); for (int i = 0; i < bytes.length; ++i) { if (bytes[i] < 0) {// 调整异常数据 bytes[i] += 256; } } OutputStream out = new FileOutputStream(imgFilePath); // 生成png图片 out.write(bytes); out.flush(); out.close(); return true; } catch (Exception e) { return false; } }
后台代码
public void Base64ToImages(){String m=getPara("imageData", "null").substring(22);String path = getSession().getServletContext().getRealPath(Preference.DOWN_DIR); // 基础路径Base64ToImg.GenerateImage(m, path + "/test.png" );}
666导航网——方便管理个人常用网址
阅读全文
1 0
- base64+jfinal+canvas实现在线电子签名功能
- base64+jfinal+canvas实现在线电子签名功能
- base64+jfinal+canvas实现在线电子签名功能
- HTML5 CANVAS实现电子签名完整demo
- android 电子签名 手写签名 功能实现
- Html5 canvas 应用于webkit浏览器实现电子签名
- JFinal实现在线人数与信息集合功能
- Android上自定义View实现电子签名功能
- 移动端的canvas电子签名
- HTML5 canvas电子签名与截图
- 实现: 在线签名, C#实现压缩/解压功能,线程
- 站点中,实现: 在线签名 功能 (示例代码下载)
- 站点中,实现: 在线签名 功能 (示例代码下载)
- 站点中,实现: 在线签名 功能 (示例代码下载)
- 站点中,实现: 在线签名 功能 (示例代码下载)
- 站点中,实现: 在线签名 功能 (示例代码下载)
- 电子签名的技术实现
- 用Openssl实现电子签名(VC)
- 新装Debian后遇到的一些小问题总结
- vue.js 之将填空转化为下划线
- 业务技术协同线上化的硬盘式研发管理实践
- Javascript闭包入门(译文)
- 蓝桥杯--算法练习:最短路(单源最短路径spfa算法)
- base64+jfinal+canvas实现在线电子签名功能
- ubuntu配置交叉编译链
- font-family
- centos7配置本地yum源
- TFRecord格式数据和类似cifar的bin格式文件
- 极其方便的系统原生图片选取库,已适配Android 7.0
- Ubuntu14.04安装Ryu控制器
- 关于Data truncation: Incorrect string value: '' for column 问题的解决办法
- CSS并不简单--z-index引发的思考