html 毛笔书写效果,canvas 手写毛笔字效果

news/2024/11/17 22:29:08/
canvas 手写毛笔字效果

#canvasId {

background-color: #FFFFcc;

}

function Handwriting(id) {

this.canvas = document.getElementById(id);

this.ctx = this.canvas.getContext("2d");

this.ctx.fillStyle = "rgba(0,0,0,0.25)";

var _this = this;

this.canvas.onmousedown = function (e) { _this.downEvent(e)};

this.canvas.onmousemove = function (e) { _this.moveEvent(e)};

this.canvas.onmouseup = function (e) { _this.upEvent(e)};

this.canvas.onmouseout = function (e) { _this.upEvent(e)};

this.moveFlag = false;

this.upof = {};

this.radius = 0;

this.has = [];

this.lineMax = 30;

this.lineMin = 3;

this.linePressure = 1;

this.smoothness = 80;

}

Handwriting.prototype.clear = function () {

this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);

}

Handwriting.prototype.downEvent = function (e) {

this.moveFlag = true;

this.has = [];

this.upof = this.getXY(e);

}

Handwriting.prototype.moveEvent = function (e) {

if (!this.moveFlag)

return;

var of = this.getXY(e);

var up = this.upof;

var ur = this.radius;

this.has.unshift({time:new Date().getTime() ,dis:this.distance(up,of)});

var dis = 0;

var time = 0;

for (var n = 0; n < this.has.length-1; n++) {

dis += this.has[n].dis;

time += this.has[n].time-this.has[n+1].time;

if (dis>this.smoothness)

break;

}

var or = Math.min(time/dis*this.linePressure+this.lineMin , this.lineMax) / 2;

this.radius = or;

this.upof = of;

if (this.has.length<=4)

return;

var len = Math.round(this.has[0].dis/2)+1;

for (var i = 0; i < len; i++) {

var x = up.x + (of.x-up.x)/len*i;

var y = up.y + (of.y-up.y)/len*i;

var r = ur + (or-ur)/len*i;

this.ctx.beginPath();

this.ctx.arc(x,y,r,0,2*Math.PI,true);

this.ctx.fill();

}

}

Handwriting.prototype.upEvent = function (e) {

this.moveFlag = false;

}

Handwriting.prototype.getXY = function (e)

{

return {

x : e.clientX - this.canvas.offsetLeft + (document.body.scrollLeft || document.documentElement.scrollLeft),

y : e.clientY - this.canvas.offsetTop + (document.body.scrollTop || document.documentElement.scrollTop)

}

}

Handwriting.prototype.distance = function (a,b)

{

var x = b.x-a.x , y = b.y-a.y;

return Math.sqrt(x*x+y*y);

}

var hw = new Handwriting("canvasId");

hw.lineMax = 40;

hw.lineMin = 5;

hw.linePressure = 2.5;

hw.smoothness = 100;


http://www.ppmy.cn/news/539644.html

相关文章

html怎么设置毛笔字体,三种实用的毛笔书法字体设计制作教程

三种实用的毛笔书法字体设计制作教程 书法字体2015.09.08书法字体 毛笔字、书法字都非常漂亮&#xff0c;但现在除了少数书法家&#xff0c;书法爱好者能写的一手漂亮的书法外&#xff0c;很少有人能写好书法字了&#xff01;作为设计师(特别是网页设计师、包装设计师)&#xf…

html怎么设置毛笔字体,原来毛笔字体是这么设计的!

无论是制作专题页还是制作海报我们都会用到字体&#xff0c;在很多的广告中为了加强画面的冲击力&#xff0c;经常会使用到毛笔字的表现形式。当使用毛笔字表现的时候&#xff0c;很多设计师都会进去一个误区&#xff0c;马上去网站找字库&#xff0c;怎么也找不到合适的字体。…

Windows和Linux动态注入

摘要&#xff1a;最近对动态注入有一些兴趣因此搜索了些资料&#xff0c;简单整理了下相关的技术实现。本文只能够带你理解何如注入以及大概如何实现&#xff0c;对注入的方法描述的并不详细。   关键字&#xff1a;dll注入&#xff0c;hook&#xff0c;提权   读者须知&am…

7A50T 引脚功能详解

本文针对7A50T芯片&#xff0c;详细讲解硬件设计需要注意的技术点&#xff0c;可以作为设计和检查时候的参考文件。问了方便实用&#xff0c;按照Bank顺序排列&#xff0c;包含配置Bank、HR Bank、HP Bank、GTP Bank、供电引脚等。 参考文档包括&#xff1a; ds181_Artix_7_D…

温度传感器100k 热水器温度探头

东莞市龙畅电子科技有限公司&#xff0c;是专门从事温度传感器生产与研发的企业&#xff0c;公司生产的温度传感器品种多&#xff0c;规格全&#xff0c;主要有热敏 ntc温度传感器&#xff0c;ptc温度传感器&#xff0c;pt100&#xff0c;pt1000温度传感器&#xff0c;ds18b20温…

家装电线越粗越好吗

在装修这件事上&#xff0c;很多家庭都尽量用最好的&#xff0c;尽量做预留。电线的选择也是如此&#xff0c;有些人认为电线越粗越好&#xff0c;虽然现在4平方线和6平方线比较贵&#xff0c;但是负载更大更安全&#xff0c;以后也可以为各种电器预留。但实际上&#xff0c;这…

10. 第十部分:未来的JavaScript发展趋势

10.1 WebAssembly WebAssembly&#xff08;通常缩写为Wasm&#xff09;是一种二进制指令格式&#xff0c;旨在在Web浏览器和其他环境中以安全、高效的方式执行。它是一种低级虚拟机&#xff0c;作为可移植的编程语言目标&#xff0c;允许开发人员在Web上以接近本机性能运行其代…

LAME应用教学--HIFI级MP3制作之路

HIFI级MP3&#xff1f;可能吗&#xff1f;LAME又是什么&#xff1f;看完全文就会知道&#xff0c;不过&#xff0c;在此之前&#xff0c;还是先普及一下MP3基本知识&#xff0c;不然大家或许会不明白。一、MP3家史  mp3全名是mpeg audio layer iii&#xff0c;诞生于1987年&a…