描点 原笔迹 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"
        ]
    ]
]

之后利用canvas的缩放及横移技术将每个字画上去

<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子题缩放大小

时间: 2024-07-30 03:36:08

描点 原笔迹 web 解析 显示 技术的相关文章

【转】Web前端黑客技术揭秘{笔记}

原文 http://www.cnblogs.com/r00tgrok/articles/Web-Hacking.html 前些日子看完了白帽子讲Web安全,当时就PHP安全一 章做了点小笔记,感觉看书还是留下点东西比较好.翻开Web前端黑客技术揭秘一书决定要做笔记,但是这样下来其实进度就比较慢了,敲字做笔记绝对远比看书 来的慢.有时候上午看完的内容做笔记时要花一天时间,一方面是要敲字,另一方面是自己只从书上摘录部分内容有时候需要将其串起来,还有就是碰上自己想发两 句言也会拖慢进度.总之现在书是看

python实现websocket服务器,可以在web实时显示远程服务器日志

一.开始的话 使用python简单的实现websocket服务器,可以在浏览器上实时显示远程服务器的日志信息. 之前做了一个web版的发布系统,但没实现在线看日志,每次发布版本后,都需要登录到服务器上查看日志,非常麻烦,为了偷懒,能在页面点几下按钮完成工作,所以这几天查找了这方面的资料,实现了这个功能,瞬间觉的看日志什么的,太方便了,以后也可以给开发们查日志,再也不用麻烦运维了,废话少说,先看效果吧. 二.代码 在实现这功能前,看过别人的代码,发现很多都是只能在web上显示本地的日志,不能看远程

第一章 Java Web应用开发技术

1.Java Web应用开发技术 Java Web应用开发是基于JavaEE(JavaEnterprise Edition)框架的,而JavaEE是建立在Java平台上的企业级应用解决方案.JavaEES框架提供的Web开发技术主要支持两类软件的开发和应用,一类是做高级信息系统框架的Web应用服务器(Web Application Server),另一类是在Web服务器上运行的Web应用(Web Application).我们以后所说的Java Web应用开发就是这里的第二类.即在Web服务器上

Web Service 附件技术的发展及演变

Web Service 通常将业务数据封装在 SOAP 主体或者 SOAP 消息附件中进行传输,这些附件往往采用 Base64 编码二进制方式进行封装,这将大大增加待传输的数据量,消耗比较长的编码时间和传输时间.随着 SOA 以及 Web Service 技术的广泛采用,由于网络带宽,延时的影响以及内存大小的限制,越来越多的应用对 Web Service 附件传输方式以及传输效率提出了更高的要求. 引言 本文对 Web Service 附件技术及其相关开发工具进行了总结,详细介绍了 Web Se

第十 构建Web内容的技术

第十章 构建Web内容的技术 一.HTML HTML(HyperText Markup Language,超文本标记语言)是为了发送Web 上的超文本(Hypertext)而开发的标记语言.超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本.标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言.我们把出现在 HTML文档内的这种特殊字符串叫做 HTML标签(Tag). 二.动态HTML 动态 HTML技术是通过调用客户端脚本语言 Ja

读书笔记--大规模web服务开发技术

总评   这本书是日本一个叫hatena的大型网站的CTO写的,通过hatena网站从小到大的演进来反应一个web系统从小到大过程中的各种系统和技术架构变迁,比较接地气. 书的内容不是很难,所以总的来说比较容易阅读,不需要特别累的啃,可想而知,不是非常深入的,更多的还是把作者的一些经验写出来,hatena这种量级的在国内应该是一个中型网站的水平,作者基本把这个量级web服务的运维的方方面面都讲了一遍,看完可以对这个这种量级网站有一个总体的了解,个人认为还是值得一读的. 逐章读书笔记: 第一章 大

3D显示技术发展历程与现状

前言: <阿凡达>上映后,3D显示就一发不可收拾.人们惊叹于这项技术通过电影带给人们的视觉冲击力,立体的画面让观众仿佛身临其境,更加接近真实世界的感受.为了让3D显示技术走进大众的视野,广播电视总局发文一系列有关推进3D显示文件,其中北京电视台.央视等多个频道已着手3D制作,有望明年上线. 阿凡达效应仍在持续,无数影迷已如痴如醉,甚至一度出现,无3D不观影之势.如是,3D便如忽如一夜春风来,千树万树梨花开;然而,这时众多伪3D也趁机而入,真正3D却为之甚少.近期,随着国产首部IMAX+3D电影

Eclipse导入MyEclipse工程(web项目显示为java项目解决办法)

在直接Import MyEclipse的项目文件导入到Eclipse之后,需要在项目所放的workspace内修改引入项目目录下的.project文件,修改如下: 1.在eclipse中新建一个WEB项目将根目录下下的.project文件覆盖到导出的项目同样目录下, 2.打开导入项目的.project文件,修改下<name>test</name>中间的值即可 之后,刷新项目工程文件.继而,右键项目-->Properties-->选择Project Facets,勾选Dy

shell自动收集服务器硬件系统信息通过web页面显示

1.脚本部分 #!/bin/bash #auto get system info echo -e "\033[34m\033[1m" cat <<EOF +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++Welcome to use system Coolect++++++++++++++++++++++++++++ ++++++