描点 原笔迹 web 解析 显示 技术
利用 html5 的canvas能实现文本上显示原笔迹 首先原笔迹必须是一系列的描点,
这些点的特征的结构是, N个点组成笔划吗N个笔划组成一个字例如
point.js文件
var point = [ [ "175.625:57.632813", "175.625:60.87802", "175.625:65.93036", "175.625:75.62009", "175.625:90.73721", "174.68073:109.36893", "172.44385:129.04236", "169.52151:150.65607", "166.54193:171.35876", "164.75934:190.54639", "163.53656:206.51831", "162.58234:223.50244", "162.11154:239.67389", "161.5625:253.94531", "161.25:265.54364", "161.06082:276.44476", "160.9375:286.49054", "160.9375:295.25464", "161.92334:301.2641", "162.65527:304.79657", "164.6875:308.1211", "164.6875:308.1211" ] ], [ [ "211.5625:104.50781", "213.39026:100.660614", "222.39087:93.247894", "236.27014:86.43512", "254.64633:82.34967", "276.48703:81.54175", "295.65634:83.87268", "312.76923:88.45096", "324.68903:95.496826", "333.32703:105.38547", "336.25:119.960175", "332.37775:141.42047", "319.29712:169.13025", "302.69257:197.17572", "284.8603:222.12512", "267.18628:243.98682", "253.20853:259.35828", "241.8558:270.7683", "235.25412:276.95227", "232.24524:280.02155", "232.68735:281.3437", "237.26474:281.0901", "251.44858:276.30164", "272.3015:267.76147", "296.75482:256.9486", "322.9429:245.78064", "345.88837:236.81409", "363.77072:229.77716", "376.38977:225.4638", "384.45917:223.17517", "389.21875:222.86719", "389.21875:222.86719" ] ] ]
<html> <head> <script type="text/javascript" src="point.js"></script> </head> <body> 广场的正<span style="padding: 1px;border-bottom: 1px solid gainsboro;" class="blank_canvas"><img src="file:///C:/Users/dell/Desktop/umeditor1_2_2-utf8-php/themes/default/images/_03.png" /></span>飘扬着鲜艳的五星红旗! <span style="padding: 1px;border-bottom: 1px solid gainsboro;" class="blank_canvas"><img src="file:///C:/Users/dell/Desktop/umeditor1_2_2-utf8-php/themes/default/images/_03.png" /></span> <script type="text/javascript"> //横向 function getLateralOffset(prevWordPoint) { var prevWordXPoints = getWordXPoints(prevWordPoint); var lOffset = parseInt(prevWordXPoints[prevWordXPoints.length - 1]) return lOffset; } //获取一个字的所有横向坐标 function getWordXPoints(wordPoint) { var wordXPoints = []; for(var i = 0; i < wordPoint.length; i++) { for (var j = 0; j < wordPoint[i].length; j++) { wordXPoints.push(wordPoint[i][j].split(":")[0]); } } wordXPoints.sort(); return wordXPoints; } function draw(_point, offset, _h, _w,_scale) { var _c=$(".blank_canvas")[offset]; $(_c).html('<canvas class="myCanvas" height="' + _h + 'px" width="' + _w + 'px"></canvas>'); var c = document.getElementsByClassName("myCanvas")[offset]; var ctx=c.getContext("2d"); ctx.scale(_scale,_scale); ctx.beginPath(); var point = {}; var loffset = 0; for (var k = 0; k < _point.length; k++) { //横向移动 应该是从上一个字的横坐标最大位置开始 //获取上个字的横向最大坐标 if (k > 0) { loffset = getLateralOffset(_point[k-1]) - getLateralOffset(_point[k-1]) * _scale; ctx.translate(loffset, 0); } //画出word for (var i = 0; i < _point[k].length; i++) { for (var m = 0; m < _point[k][i].length; m++) { point = _point[k][i][m].split(":"); if (m == 0) { ctx.moveTo(point[0], point[1]); }else { ctx.lineTo(point[0], point[1]); } } } ctx.strokeStyle="black"; ctx.lineWidth = 10; ctx.stroke(); } } _scale = 0.05; draw(l30, 0, 18, 900, _scale); </script> </body> </html>方法:
draw(_point, offset, _h, _w,_scale)参数说明: _point:所有字的描点的集合 offset当前第几个画布, _h画布高度, _w画布宽度, _scale子题缩放大小
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。