使用canvas怎么实现一个在线签名功能

Canvas是HTML5新增的元素,用于在网页上绘制图形,它由Apple在Safari1.3Web浏览器中引入,之所以对HTML扩展的原因在于,HTML在Safari中的绘图能力能为MacOSX桌面的Dashboard组件所使用,并且Apple也希望有一种方式可以在Dashboard中支持脚本化的图形。Firefox1.5和Opera9这两个浏览器也紧随Safari的引领,开始支持Canvas。

现在,Canvas标签已经是HTML5最伟大的改进之一,因为它可以让我们在不使用图片的情况下实现网页的图形设计。它就像一块画布,本身没有绘制能力,但却把绘制API展现给客户端JavaScript,我们借助JavaScript的支持,在画布范围内尽情发挥,达到想要的效果。

技术选型

这个功能无论是Canvas、SVG或是Flash,都可以实现,但是我们为什么选择了Canvas呢?

首先,由于功能上我们需要支持移动平台,所以Flash我们就可以直接弃掉,它在移动端方面并没有得到友好的支持,但Canvas和SVG都具有很好的跨平台能力,我们如何抉择,下面我们来对比一下。

两者各有自己的擅长领域,基于以上,我们选择了Canvas来实现签字功能。

下面,我们来看一下实现效果。

创建画布

首先,我们需要判断浏览器是否支持Canvas:

{isCanvasSupported(this.canvas=canvas)}height={canvasHeight}width={canvasWidth}>:对不起,当前浏览器暂不支持此功能!}我们知道,每个Canvas节点都有一个对应的context对象,我们可以通过Canvas对象的getContext()方法,直接把量字符串“2d”作为唯一的参数传递给它来获取。接下来,我们通过ref获取Canvas元素,再通过getContext()方法得到一个画布上绘图的环境。

绘制

首先绘制开始路径:

cxt.beginPath();然后设置当前线条的宽度:

cxt.lineWidth=5;设置线条的颜色:

cxt.moveTo(0,0);cxt.lineTo(150,0);//绘制已定义的路径cxt.stroke()

但是,我们发现绘制的线条比较生硬

这时,我们可以通过lineCap改变线条末端线帽的样式,为每个末端添加圆形线帽,减少线条的生硬感

同时,我们还可以通过设置lineJoin,指定条线交汇时为圆形边角

但我们又发现,绘制的线条有明显的锯齿,此时我们就需要借助Canvas为我们提供的绘制元素阴影的功能来模糊边缘出现的锯齿,因为有阴影,所以我们可以适当改变lineWidth值

是不是变得圆润很多,到这里,我们绘制线路的方法已经准备完事,接下来我们来看一下怎么监听画布事件来实现连贯执行绘制吧!

监听画布事件

因为我们需要同时兼容PC端和移动端,所以我们需要事先需要判断一下对应执行的事件

this.canvas.addEventListener(this.events[0],startEventHandler,false);在startEventHandler函数中监听events[1]和events[2]事件

this.canvas.addEventListener(events[1],moveEventHandler,false);this.canvas.addEventListener(events[2],endEventHandler,false);重点来了,我们核心的内容就是计算、描绘划过的路径

moveEventHandler(event:any):void{event.preventDefault();const{ctx,isSupportTouch}=this.state;constevt=isSupportTouchevent.touches[0]:event;constcoverPos=this.canvas.getBoundingClientRect();constmouseX=evt.clientX-coverPos.left;constmouseY=evt.clientY-coverPos.top;cxt.lineTo(mouseX,mouseY);cxt.stroke();}了解Canvas的知道,Canvas画布为我们提供了一个用来作图的平面空间,该空间的每个点都有自己的坐标,x表示横坐标,y表示竖坐标。原点(0,0)位于图像左上角,x轴的正向是原点向右,y轴的正向是原点向下。

于是我们通过getBoundingClientRect()方法获得页面Canvas元素相对浏览器视窗的位置左边和顶部的像素距离,再利用clientX,clientY事件属性返回当事件被触发时鼠标指针向对于浏览器页面的水平和垂直坐标,最后通过lineTo和stroke来绘制路径。

同时,我们要记得在events[2]事件执行之后,移除events[1]、events[2]事件,否则会造成一直绘制。

endEventHandler(event:any):void{event.preventDefault();const{events,moveEventHandler,endEventHandler}=this.state;this.canvas.removeEventListener(events[1],moveEventHandler,false);this.canvas.removeEventListener(events[2],endEventHandler,false);}如此反复循环上述事件操作,我们的签字功能就基本实现了。

重新绘制

签字过程中,签错或是签的过于潦草是必不可免的,所以我们需要支持清空签字的功能,这时,我们利用Canvas的clearRect()方法就可以帮助我们清除画布区域内容。

cxt.clearRect(0,0,canvasWidth,canvasHeight);图片处理

绘制之后我们还没完事,我们还需要把绘制的签名上传保存。这时,我们可以利用toDataURL()方法将Canvas转化成一般的图像文件形式。

通常我们直接执行以操作就能转化成dataURI,然后再利用ajax请求上传就完事了。

说道html2canvas,顺便给大家一个绕坑提示,它在一些低版本浏览器截出来的图片是空白的,原因是使用了flex布局,而html2canvas并不支持-webkit-flex或-webkit-box,所以无法将HTML生成Canvas,从而导致了截出一张白屏。

THE END
1.签名图片签名素材签名PNG大全下载熊猫办公网站共为您提供126个签名设计素材以及精品签名图片下载,汇集全球精品流行的签名免抠元素完整版模板,下载后直接替换文字图片即可使用,方便快捷的不二选择。https://m.tukuppt.com/sopng/qianming.html
2.签名设计素材签名设计png图片下载觅元素是设计素材的免费下载网站,提供签名设计素材,签名设计png图片等素材免费下载,下载签名设计素材就来觅元素。https://www.51yuansu.com/sopng/qianmingsheji.html
3.一笔签名设计免费版在线生成潇洒实用的顶尖手写艺术签名设计,完全免费,在线生成,让您受益终生! 在线生成后一笔签名拥有的清晰度很高:780*520像素,请直接输入您的姓名,接着免费在线设计即可。 特别提醒:一笔签和连笔签字库齐全,已经更新了姓名中的偏僻汉字,请放心设计。http://www.yishuzi.com/_yishuzi/b/25.htm
4.签名png生成器生成字体分类发现字体最后更新: 2024-12-11 共 7个字体 简介: 签名png生成器 Alacrity Sans Semibold语言:英文 Be Vietnam Pro Italic语言:英文 Plantros语言:英文 Imbue 50pt Thin语言:英文 Dupincel Large Test Light Italic语言:英文 Floren语言:英文 Belgane语言:英文http://www.qiuziti.com/fontlist2?id=1041686
5.签字png图片签字png图片素材免费下载千库网为设计者提供签字png素材大全,为您省却签字png图片素材搜索时间,这里有海量签字png素材图片供您下载使用,本次搜索千库网为您找到10000张素材https://588ku.com/image/qianzipng.html
6.在线签名生成器免费,rpa,机器人,自动化艺术字网一笔签名设计免费版在线 艺术字2024年5月18日?·?一笔签名设计免费版在线,艺术字网出品,极品连笔艺术字签名转换器。 一笔签名设计转换器:一笔签,即签署姓名时飘逸潇洒,一气呵成,给人以酣畅淋漓的视觉冲击。更多内容请查看http://www.yishuzi.com/b/13.htm https://www.wdlinux.cn/html/email/20241211/23845.html
7.签名设计,个性艺术签名!其中这件短袖的设计也是非常经典了,配上文字,有那feel了~ 睡醒了8 今天有点?上衣:m5is 黑色人像印花短袖T恤?裤子:guuka 撞色拼接抽绳束脚休闲裤?球鞋:椰子350黑天使 keshiw 得物er-U8P9H9L2 放学别走c 关注 签名设计,个性艺术签名! 让你名字呈现出不一样的美是我们的https://m.dewu.com/note/trend/details?id=254005218
8.插画情人节艺术字免抠元素下载编号35346921插画情人节艺术字免抠元素原创作品是设计师M20201618922268上传到我图网,本作品为版权图片,图片编号35346921,上传时间为2024-12-10 22:14:20,图片大小为0.86MB,格式为,素材尺寸/像素为-高清品质,颜色模式为RGB,本作品为独家原创素材,下载后在本地用 无(.png)软件编辑修改。https://weili.ooopic.com/weili_35346921.html
9.在线签名生成转换艺术签名在线设计- 反链 0 0 - 0 - 最近访问 quickinno.comzsjy.tjutcm.edu.cnanxtech.netredwangs.comxy.czbanbantong.comwww.downkr.comm.militecw.comm.bzqiming.com125.lawww.redflag-os.comwww.suns.comybzyyy.netwww.server520.comwww.jsmingo.comwww.parkopedia.cnjianzhan198.comwww.shandongyitong.netgxducheng.http://www.zyqxt2.com/tools/seo-lookup/www.ssjjss.com
10.艺术签名在线生成一笔签名设计在线艺术字体在线生成器艺术签名在线生成 一笔签名设计在线 艺术字体在线生成器_艺术字网 相似网站 包图网_专注原创商用设计图片下载,会员免费设计素材模板独家图库 包图网汇集了各种视觉冲击力强的原创广告图片设计、电商淘宝、企业办公模板、视频、配乐、音效、字体、插画动图、装饰装修等素材,由顶尖的设计师供稿,符合各个行业的商用需求,下载https://nav.dreamthere.cn/site/index/85013
11.姓氏签名(267)psdpng平面设计模版素材免费下载爱给网提供海量的模板大全资源素材免费下载, 本次作品为psd,png 格式的姓氏签名 (267), 本站编号94062268, 该模板大全素材大小为19m, 更多精彩模板大全素材,尽在爱给网。 压缩包内容概览: 姓氏签名 (267)_爱给网_aigei_com找到更多"平面模板/平面设计/姓氏签名 (267)"资源搜索更多 姓氏https://www.aigei.com/item/xing_shi_qian_m_256.html
12.设计师签名免费签名设计生成器在线签名生成转换设计师签名网是中国领先的艺术签名制作平台,免费签名生成转换器支持硬笔签、时尚签、立体签、行楷签等效果,集成草体签、瘦金签、板书签、童体签等功能智能实现在线签名设计,可生成png,svg,pdf格式,请牢记设计师签名 www.ssjjss.comhttp://www.ssjjss.com/
13.连笔英文艺术签名设计英文字体在线生成器SignGenerator急切网免费的英文艺术签名、英文签名设计:英文字体在线生成器! 艺术字体在线生成器英文版本 精选个性英文签名字体、英文艺术字体,包括一些手写英文、连笔英文、一笔英文,免费地为您在线生成转换! 生成PNG格式的透明背景的英文艺术签名图片 可以直接使用在WORD文档中。插入英文签名图片后,在英文签名图片上面右键单击,选择“设置图片http://www.jiqie.com/a/34.htm
14.签名(signature)图片png,ico图标爱给网提供海量的图标库资源素材免费下载, 本次作品为png,ico 格式的签名(signature), 本站编号41966222, 该图标库素材大小为4k, 许可范围为可商用,协议名称为GNU通用公共许可1.0, 更多精彩图标库素材,尽在爱给网。 浏览本次作品的您可能还对 gnomeicontheme签名 感兴趣。 http://pay.91wei.com/item/signature_qian_6.html
15.艺术签名艺术签名在线生成艺术签名在线生成功能特色 方便快捷的设计体验 一键自动生成艺术签名,无需复杂的人工设计过程,省时又省力 艺术字体多样性 丰富的艺术字体可供在线选择,满足个性化的设计要求 字体样式自定义 支持自定义字体颜色、背景、描边等属性,创作出与众不同的艺术签名 https://www.gaituya.com/qianming/
16.《艺术签名》学明星连笔艺术签名设计免费版在线生成艺术签名连笔签名在线艺术签名设计免费版 艺术字体在线生成器 连笔签名在线艺术签名设计器艺术字体在线生成器.右击图片保存,仅为个人学习欣赏用。请在下图上点击鼠标右键,选择“图片另存为”将生成的钢笔手写体PNG图片保存到本地。艺术签名本站不作保存。一笔签名右击图片保存,仅为个人学习欣赏用http://www.360doc.com/content/17/0331/15/38928166_641712655.shtml
17.签名生产图片在线编辑软件零代码企业数字化知识站在线编辑软件通常支持多种文件格式的导入和导出,这使得用户可以方便地与其他设计软件协同工作。常见的文件格式包括JPEG、PNG、SVG、PDF等。用户可以根据需要,选择合适的格式进行保存和分享。 支持多种文件格式还意味着用户可以更灵活地处理和转换图片。例如,用户可以将签名生产图片保存为高分辨率的PNG文件,用于打印和展示,https://www.jiandaoyun.com/blog/article/381102/
18.sign.ssjjss.com设计师签名免费签名设计生成器网站描述 (一般不超过200个字符) 123个字符 设计师签名网是中国**的艺术签名制作平台,免费签名生成转换器支持硬笔签、时尚签、立体签、行楷签等效果,集成草体签、瘦金签、板书签、童体签等功能智能实现在线签名设计,可生成png,svg,pdf格式,请牢记设计师签名 sign.ssjjss.com sign.ssjjss.com WHOIS信息: 域名服http://m.fwol.cn/seo/?url=sign.ssjjss.com
19.免费微信签名模板微信签名设计素材微信签名图片Fotor懒设计提供免费微信签名模板、微信签名设计素材、微信签名图片,在线编辑微信签名模板,文字图片背景皆可修改,简单3步在线完成平面设计,并能下载高清微信签名图片。https://www.fotor.com.cn/templates/tag-weixinqian-8beb-28
20.模仿签名和电子签名是什么意思?曦之签名网专注于签名设计,个性签名,花式签名,在线签名,免费签名等高端定制服务;曦之签名网为大众提供个性手写签名有:商务签名,形象签名,连笔签名设计等高端优质的定制服务,联系电话:028-82662926。https://www.xizhiqm.cn/article/TKDnTT36VCo0hdNHg4EW
21.艺术签名设计软件下载签名设计免费版工具签名设计软件 个人签名软件可以根据个人喜爱手动调节签名款式、字体颜色、字体大小以及背景等。你还可以拖动设计好的艺术签名,放到背景中你最满意的位置。签名设计完成后可以保存为jpg、png等图片格式,你还可以将签名直接打印出来。不同的款式的签名设计软件略有不用,有的签名可以手写,有的支持中文、英文双签名等等。说https://m.qqtn.com/k/qmsjrj/
22.唯美手写飘逸连笔花式粗体签名LOGO封面包装英文字体设计PS素材PNG格式为透明无背景底色的图片, 不用抠图,可以用PS或美图秀秀等添加编辑。 [矢量]素材,为EPS或AI或CDR格式,EPS和AI必须用AI(即illustrator软件,由于素材比较新, 建议用最新版本CS5)打开。CDR用CorelDRAW软件打开。 矢量素材可无限放大、改色,编辑设计和输出。) *关于售后 * 由于本店所有商品为虚拟商品,一经http://huaihua.witcp.com/design/c24/t5c8e58ccd5e5.html
23.在线生成签名图片手写签名并下载PNG透明图片本工具适用于各种需要上传本人签名图片的网上报名、生成带签字电子报告单等用途https://www.gaitubao.com/signature
24.个性化艺术签名生成器:吴克群杨字等多款手写艺术签名在线生成!2、在这样的背景下,手写艺术签名在线生成工具应运而生。作为一款专业的签名生成工具,手写艺术签名在线生成通过创意设计和高质量技术,使你的签名更具艺术感和独特性,从而让你在签署文件或发送签名邮件时更具个性和亲和力,提升自己在人群中的独特性和影响力。 https://www.yc58.cn/renwen/4058.html
25.如何用cad设计签名完成设计后,仔细检查每一个细节,确认没有错误,可以将签名导出为常用的图片格式如JPEG或PNG,或者作为矢量图形如SVG以便于在不同场合使用。 9、打印或数字应用 如果你打算将签名用于纸质文档,确保在打印前调整打印机设置以获得最佳效果,如果是用于数字文档,确保分辨率足够高以保持清晰度。 https://www.kdun.com/ask/591094.html