canvas学习笔记,实现刮刮卡在线签名图片涂抹裁切起初在boss上看到一个面试官发题,利用canvas实现图片裁切

在实现下面功能首先的先明白canvas是做什么的?能解决什么问题?

Canvas是一个HTML元素,可用于在网页上绘制图形、动画和其他可视化效果。它通过JavaScript编程接口来实现。

Canvas可以用于各种任务,包括绘制图表、创建游戏、制作交互式的用户界面等。它可以处理大量的图形和动画,并且具有良好的性能和响应速度。

Canvas的优势包括:

Canvas的一些劣势:

Canvas可以实现功能,例如:

第一种

varcanvas=document.createElement("canvas");constcontext=canvas.getContext('2d');document.body.appendChild(canvas);注:实际操作使用第二种更加友好,因为通过第二种的添加方式,可以在调用canvasAPI时候有代码提示。

一般设置画布和画笔都会做前置条件,例如:设置画布大小,画笔的粗细颜色等信息,例如:

varcanvas=document.createElement("canvas");canvas.classList.add("scratcanvas");canvas.width=width;canvas.height=height;constcontext=canvas.getContext('2d');2画笔画笔有两种3D和2D两种,演示功能主要使用2d画笔,所以接下来围绕2d画笔说。

2D画笔具有以下功能:

使用context.beginPath()方法,为不同部分的途径设置开关(设置分组)。只对紧邻这组路径进行绘制。通过这种方式,表示绘图上下文以下绘画的路径方式将不会影响之前绘画内容。

ctx.beginPath();ctx.moveTo(50,50);//开始绘画点ctx.lineTo(250,50);//经过点ctx.stroke();//结束直线绘制举个例子

clearRect()方法接受四个参数,分别是:

context4.closePath()context4.clearRect(0,0,width,height);5引入图像在画布上引入图像的方式需要通过

通过drawImage将image塞入到canvas组件中,绘制图像参数:

图像合成是指在Canvas中将多个图像或者样式叠加在一起,从而创建出复杂的绘图效果。这个就是canvas能够实现很多复杂多变效果的方式,目前还没有研究透彻。主要是利用是globalCompositeOperation属性。该属性用于设置绘制操作时的合成模式,决定了新的绘制内容如何与已有的内容进行合成。列举一些globalCompositeOperation属性可以设置为不同的值来实现不同的合成效果。以下是常见的一些值:

实现刮刮乐效果是通过两张图层进行重叠实现,一张是img或div作为结果放在底部,在上面覆盖一层canvas灰色的画布进行遮盖,当鼠标在canvas上移动则消除灰色区域从而实现刮刮卡效果

在页面上写一个div

//统一宽高constwidth=400;constheight=300;//创建一个开奖结果//创建画布,用户刮开则显示开奖结果letdiv=document.createElement("div");div.innerText="一等奖"div.className="scrat"document.getElementById("card").appendChild(div);2创建canvas使用canvas创建绘制刮刮乐蒙版

//创建一个canvasvarcanvas=document.createElement("canvas");canvas.classList.add("scratcanvas");//设置宽高canvas.width=width;canvas.height=height;//设置画笔constcontext=canvas.getContext('2d');通过画笔中的fillstyle实现将某个区域填充灰色。

//画一个灰色画布遮住界面context.fillStyle="#EFEFEF";context.fillRect(0,0,width,height);再通过画笔绘制线条,之后通过线条和页面中重叠的地方进行消除,即可实现刮刮卡效果,将canvas添加到class叫scrat的div中。

//画一个圆//画笔分割context.beginPath();//设置画笔的粗细context.lineWidth=20;//转角和端点设置为圆弧context.lineCap="round"context.lineJoin="round"document.getElementsByClassName("scrat")[0].appendChild(canvas);3添加鼠标事件添加点击移动事件,主要是监听用户鼠标三个事件,1、按下鼠标左键;2、移动鼠标;3、抬起鼠标左键。具体实现通过document.addEventListener来监听mousedown、mousemove、mouseup三种情况,修改鼠标状态isMouseDown的true和false来实现。

//鼠标是否按下状态varisMouseDown=false;//鼠标按下,划线document.addEventListener('mousedown',function(event){isMouseDown=true;//新旧图层重叠部分透明context.globalCompositeOperation='destination-out';//封装函数,通过getCanvasPosition传入鼠标位置,获取在canvas中对应的位置var{x,y}=getCanvasPosition(event);//开始画线context.moveTo(x,y);});//在这里可以对鼠标位置进行处理document.addEventListener('mousemove',function(event){if(!isMouseDown)return;var{x,y}=getCanvasPosition(event);context.lineTo(x,y);context.stroke();});document.addEventListener('mouseup',function(event){isMouseDown=false;});//封装函数。计算canvas位置functiongetCanvasPosition(event){//获取鼠标当前位置varx=event.clientX;vary=event.clientY;//减去div的位置x-=div.offsetLeft;y-=div.offsetTop;//减去canvas的位置x-=canvas.offsetLeft;y-=canvas.offsetTop;return{x,y};}最后再调整下页面的样式,通过子绝父相的css来实现重叠。

当会了刮刮卡效果后可以在此基础上实现电子签名的功能,同样是使用画笔的功能,同样可以先创建一个div,并添加三个按钮

/***签名组件*/constwidth=400;constheight=300;varisSign=false;//是否开启签名状态varisEraser=false;//是否开启橡皮擦varbrushSize=10;//笔粗细varbrushColor="#000";//笔颜色//签名组件constdraw=document.createElement("canvas");draw.classList.add("draw");draw.width=width;draw.height=height-30;draw.style.border="1pxsolid#ccc";//设置边框vartemp=document.getElementsByClassName("sign")[0];temp.appendChild(draw);//2d画笔varcontext2=draw.getContext('2d');context2.lineCap="round";context2.lineJoin="round";context2.lineWidth=brushSize;2鼠标事件封装一个画笔事件drawEvent(),之前通过document.addEventListener来监听mousedown、mousemove、mouseup三种,其实也可以通过组件的onmousedown、onmousemove、onmouseup实现:1、按下鼠标左键;2、移动鼠标;3、抬起鼠标左键的事件监听,原理像常用的onclick一样。

由于是签字所以会涉及两个状态,isSign(是否开启签名状态)、isEraser(是否开启橡皮擦)通过这两个状态来控制是否清除画布。

最后鼠标抬起,则清空鼠标移动和抬起事件,当用户再次按下鼠标则再次循环执行该事件,具体实现可以看下列详细代码。

//开启签字,或关闭签字document.getElementById("save").onclick=function(){isSign=!isSignif(isSign){//开始签名//console.log("开始签名");document.getElementById("save").innerText="保存";}else{//保存,生成png图片//console.log("保存");document.getElementById("save").innerText="重新";download(draw.toDataURL(),"签名.png");//设置初始值isEraser=false;//关闭橡皮擦}}在上面download(draw.toDataURL(),"签名.png")保存后调用download下载方法,并传入了canvas当前画部的数据和导出名字draw.toDataURL()是获取一个base64的图片数据,这时如何进行下载?可以通过调用a标签实现图片下载。

//清空画布内容document.getElementById("anew").onclick=function(){if(!isSign)return;//清空画布先结束之前操作context2.closePath()console.log("清空画布内容");context2.clearRect(0,0,width,height);context2.beginPath();//设置橡皮擦isEraser=false;drawEvent();}5橡皮擦·由于之前封装好了画笔事件,现在只需要改变isEraser状态,并重新调用画笔事件drawEvent()。

透明的含义是“看得透”。在计算机图形学中,透明通常用来描述某一部分的图像或者界面是可以看透的。例如,我们可以使用透明效果来实现深色图像的遮盖以及透视效果的创建。

透明度通常用一个0到1之间的实数值来表示,0表示完全透明,1表示完全不透明。

理解RGB色彩模式

RGB色彩模式是一种基于三原色的表示法,其中R表示红色,G表示绿色,B表示蓝色。通过混合不同比例的三原色,可以得到不同的颜色。透明度通常由一个透明度值表示,这个值也是一个0到1的实数。

下面是一个使用RGB表示法表达透明颜色的例子:

background:rgba(255,0,0,0.5);在上面的例子中,我们使用rgba()函数来表示一个透明度为0.5的红色背景。其中,“a”表示alphachannel,也就是透明度通道。

用刚才导出图片为例子,可以看出透明区域的rgba和写了文字的rgba是通过最后一个a值判断,透明区域的rgba(0,0,0,0)而有文字区域rgba(0,0,0,1)可以明确一点最后一个值肯定a>0

/***涂抹截取*1、创建图片作为背景;**/varisDaub=false;//是否开启涂抹状态varisErase=false;//是否开启橡皮擦constwidth=400;constheight=300;创建一个img图层放在页面class为shear的位置上,同时创建canvas图层也放在页面class为shear的位置上。

constimg=document.createElement("img");img.src="./21092414350ML0-0-lp-350.jpg";img.classList.add("daub");img.width=width;img.height=height-30;document.getElementsByClassName("shear")[0].appendChild(img);constdaub=document.createElement("canvas");daub.classList.add("daub");daub.width=width;daub.height=height-30;document.getElementsByClassName("shear")[0].appendChild(daub);设置画笔基本属性,因为这次是在img上涂抹,所以需要将画笔颜色设置为半透明,这样才不会完全遮盖图片context4.strokeStyle="rgb(23214938/50%)。

//2d画笔varcontext4=daub.getContext('2d');context4.lineCap="round";context4.lineJoin="round";context4.lineWidth=20;context4.strokeStyle="rgb(23214938/50%)";//设置透明渡的颜色选取内容2、鼠标事件这里涂抹是橡皮擦实现原理和签字组件类似,封装一个画笔事件drawEvent(),之前通过组件的onmousedown、onmousemove、onmouseup实现:1、按下鼠标左键;2、移动鼠标;3、抬起鼠标左键的事件监听,使用方法如常用的onclick一样。根据两个状态,isDaub(是否开启涂抹状态)、isErase(是否开启橡皮擦)通过这两个状态来控制是否清除画布。最后鼠标抬起,则清空鼠标移动和抬起事件,当用户再次按下鼠标则再次循环执行该事件,具体实现可以看下列详细代码。

/***涂抹/橡皮擦事件**/daubEvent();functiondaubEvent(){daub.onmousedown=function(event){if(!isDaub)return;//开始新的路径或继续现有路径if(isErase){context4.globalCompositeOperation='destination-out';}else{context4.globalCompositeOperation='source-over';}context4.beginPath();context4.moveTo(event.offsetX,event.offsetY);daub.onmousemove=function(event){if(isErase){//设置橡皮擦粗细context4.lineWidth=20;//设置字体10号context4.strokeStyle="rgba(0,0,0,1)";context4.globalAlpha=1;}else{context4.strokeStyle="rgb(23214938/75%)";//设置透明渡的颜色选取内容context4.lineWidth=brushSize;//设置字体10号context4.globalAlpha=0.01;}context4.lineTo(event.offsetX,event.offsetY);context4.stroke();}daub.onmouseup=function(event){daub.onmousemove=null;daub.onmouseup=null;}}}涂抹、重置、橡皮擦功能同样和电子签字一致,由于刚才已经封装了点击事件,只需要通过控制isDaub和isErase两个状态来管理画布如何绘画。

THE END
1.艺术签名设计免费在线制作设计一笔签名曦之签名网专注于签名设计,个性签名,花式签名,在线签名,免费签名等高端定制服务;曦之签名网为大众提供个性手写签名有:商务签名,形象签名,连笔签名设计等高端优质的定制服务,联系电话:028-82662926。https://www.xizhiqm.cn/
2.一笔签名设计在线艺术字一笔签名设计免费版在线,艺术字网出品,极品连笔艺术字签名转换器。 一笔签名设计转换器:一笔签,即签署姓名时飘逸潇洒,一气呵成,给人以酣畅淋漓的视觉冲击。艺术字网的一笔签注重整体签名的唯美协调,免费在线签名线条自然连贯,浑然一体;运笔跌宕起伏,签名字体迂回婉转之间体现一种自然美!http://www.yishuzi.com/b/m13.htm
3.一笔签名设计在线一笔签名设计免费版在线之TRUE LOVE签名图! TRUE LOVE签名图 内含 TRUE LOVE、I LOVE YOU等唯美爱情字样。 特别提醒:一笔签和连笔签字库齐全,已经完善姓名中的偏僻字体,请放心设计。 如果觉得本款签名图片特别赞,请将本站推荐给您的朋友,谢谢。http://jiqie.zhenbi.com/a/m14.htm
4.一笔签名设计免费版在线生成潇洒实用的顶尖手写艺术签名设计,完全免费,在线生成,让您受益终生! 在线生成后一笔签名拥有的清晰度很高:780*520像素,请直接输入您的姓名,接着免费在线设计特别提醒:一笔签和连笔签字库齐全,已经更新了姓名中的偏僻汉字,请放心设计。http://www.jiqie.com/a/15.htm
5.一笔签名设计在线一笔签名生成器一笔签名设计在线生成器可以提供多达6种草书书法签名,大多是连笔草书体,因为汉字笔画多不可能像英文一样真正的一笔写完,在大多数汉字来说都是不太可能的,如果你真要一笔写完那识别性就没有了,失去了它本身的意义,所以草书连笔字体才是真正的一笔签名字体,快来设计吧。http://www.uustv.com/yb/
6.一笔签名设计在线生成潇洒实用的顶尖手写艺术签名设计,完全免费,在线生成,让您受益终生! 在线生成后一笔签名拥有的清晰度很高:780*520像素,请直接输入您的姓名,接着免费在线设计特别提醒:一笔签和连笔签字库齐全,已经更新了姓名中的偏僻汉字,请放心设计。http://75.84c.cn/a/m15.htm
7.签名免费设计一笔签名在线一键生成安卓Android证书jks文件一门APP开发平台提供安卓证书制作工具,通过Android证书工具可一键在线制作Android证书,一键获得安卓证书JKS文件,自设置安卓证书别名、别名密码、文件密码、一键获得安卓证书md5签名和sha1及sha256签名密钥。http://zaixian.yimenapp.com/anzhuo-zhengshu-199.html
8.表格制作在线签名(简笔签名设计在线生成)本篇文章给大家谈谈表格制作在线签名,以及简笔签名设计在线生成对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享表格制作在线签名的知识,其中也会对简笔签名设计在线生成进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! https://www.huoban.com/news/post/124220.html
9.个性签名设计在线生成制作艺术签名,在线设计艺术签名,一笔签,签名设计在线免费版 一、个性签名设计在线生成 1、自己喜欢的日子,就是最美的日子;适合自己的活法,就是最好的活法。 2、勇气不是感觉不到恐惧而是感觉到恐惧也继续做下去。 3、想要的东西必须自己拿,不然就算别人给你也要不起。 https://www.oilube.cn/42862.html
10.xizhiqm.cn31 94 98 百度 360 神马 搜狗 谷歌 收录 13700 - - - - 反链 - 218 - - - 最近访问 syxx.sxnu.edu.cnvcontrol.com.cnm.ggzswh.comcn-jianye.comwww.hrbhongxiang.comwww.osbondgd.comwww.caipinge.comart.163.comjc-hici.comm.xwllh.com1039sccg.comkuzn.cnwww.weimingmenchuang.comwww.jiguangkehttp://www.mlwine.com/tools/seo-lookup/xizhiqm.cn
11.艺术签名设计免费版签名设计免费版在线免费签名设计艺术签名设计免费版是神笔免费签名设计网开发的在线签名设计软件,签名设计免费版,在线签名设计免费版可以在线生成免费艺术签名,免费艺术签名设计必选神笔签名设计网!http://www.qm123.com.cn/
12.笔迹司法鉴定规则是怎样的法律常识在线法律知识查询指起、行、收笔一个完整的书写过程或一系列相互关联的书写过程中反映出的书写方向和角度、书写速度和力度的变化特点在笔迹中的综合反映,以及书写过程中在笔画的起、收、转、折、连、绕、顿、提、摆、颤、抖、拖、带等细微书写动作处反映出的书写方向和角度、书写速度和力度的变化特点。 https://www.lawpa.cn/changshi/452320.html
13.数字电子留言电子签名系统(西安一笔一画)安装设计制作公司厂家欢迎前来供应商网(https://www.gys.cn)了解西安一笔一画科技有限公司发布的数字电子留言|电子签名系统(西安一笔一画)安装设计制作公司厂家价格、厂家信息,产品和服务质量好,性价比高,为您节省采购成本!进网站查看卖家电话。https://www.china.cn/zhanlanshejizhiz/3965777970.html
14.个性签名制作(锦集11篇)个性签名制作 【导语】下面是小编整理的个性签名制作(共11篇),欢迎大家阅读分享借鉴,欢迎大家分享。 篇1:qq个性签名制作 在线制作的qq个性签名 1.原来 时间 长的爱情是会变味的、讨 厌现 在的我 2.爱一个人不一定硬要在一起才是结果,只要默默为他祝福。https://www.hrrsj.com/wendang/qitafanwen/764201.html
15.一笔签名设计一笔签名设计 评分: 一笔签名设计清爽版 一键制作出属于专属签名 选择题材输入名字即可生成 支持在线练习模式 签名设计必备!赶快下载试试看吧~ 签名 签名设计 2019-01-22 上传 大小:6.00MB 所需: 50积分/C币 立即下载 微润签名设计软件 设计你自己的个性签名,让你走在时代的前沿 立即下载 上传者: https://www.iteye.com/resource/you74222-10932041
16.艺术签名设计在线生成输入姓名在线设计一笔签名,在线名字签名设计 1、在线名字签名设计 上面的是签,下面的是一笔签,希望满意并采纳。简易签名设计一笔签。个性签名应用一笔写成 点击:输入姓名后,点击“给我制作吧”就会给你设计一笔签名。 2、签名设计如下:第一步先开始-点击开始---所有程序---附件---画图,打开画图工具。我们打开https://www.kanwenda.com/k/572719.html
17.asp.net制作手写签名asp.net电子签名资源在ASP.NET平台上开发手写签名功能,主要是为了提供一种用户可以在网页上进行图形化签名的交互体验,这在电子商务、电子合同等领域非常常见。本文将深入探讨如何利用C#语言和ASP.NET技术来实现这一功能。 我们需要理解手写签名的基本原理。手写签名通常涉及到数字图像处理和用户交互,可以通过鼠标或者触屏设备模拟手写过程。在https://download.csdn.net/download/u010051858/9438686
18.签名软件生成器免费下载签名设计免费版一笔签2021艺术签名生成器是一款能够帮助用户生成艺术签名的软件,用户能够自由选择字体和方式,能够自定义签名颜色用来设计签名和水印豆非常不错,还能设计出一笔连下来的签名,让你签名的时候个性十足。 在本页面,为大家带来的,就是关于签名生成器的相关资源,需要一手好签名的朋友千万不要错过了,欢迎大家下载体验,设计出符合自己的https://m.qqtn.com/k/qmscq
19.小学艾滋病预防教案7篇3、签名活动的横幅制作、签字笔的准备; 横幅内容:遏制艾滋履行承诺 全民动员共御艾滋 相互关爱共享生命 预防艾滋人人有责 预防艾滋保健康校园和睦心欢畅。 4、有奖问答的问题箱、问题、小礼品的准备:可根据主办方的要求适时调整。 6、现场互动游戏的准备。 https://xiaoxue.ruiwen.com/jiaoan/313829.html
20.签字活动策划7.签名活动结束后,横幅要小心保管好;工作人员要清理现场。 8.活动过程中要随时照相,以便日后的资料整理。 9.所有参加的心协成员必须穿会服,佩戴工作人员证件。 九、经费预算: 横幅制作150元 海报制作2张x30元=60元 黑色签字笔10支x4元=40元 合计250元 https://www.yuwenmi.com/fanwen/huodongcehua/4231093.html
21.免费摇摇签,每日摇一卦免费免费姓名签名设计 问:哪位给俺设计个姓名签名 网上面大多都是收费的,因为人家靠手艺吃饭,随意免费的不多。 在线名字签名设计 上面的是签,下面的是一笔签,希望满意并采纳。简易签名设计一笔签。个性签名应用一笔写成 点击:输入姓名后,点击“给我制作吧”就会给你设计一笔签名。 https://www.tai26.com/?p=131452
22.预防艾滋病活动方案3、签名活动的横幅制作、签字笔的准备; 横幅内容:遏制艾滋履行承诺 全民动员共御艾滋 相互关爱共享生命 预防艾滋人人有责 预防艾滋保健康校园和睦心欢畅。 4、有奖问答的问题箱、问题、小礼品的准备:可根据主办方的要求适时调整。 6、现场互动游戏的准备。 https://www.unjs.com/huodongfangan/202211/5873063.html
23.输入姓名在线设计签名输入姓名在线设计一笔签名多特软件专题为您提供艺术签名设计软件,输入姓名在线设计签名,输入姓名在线设计一笔签名,安卓苹果版软件app一应俱全。https://m.duote.com/mip/zt/soft2093/
24.在线手写字体生成器手写汉字在线签名手写签名在线生成器让我们写出一手好字,当艺术与文字交织,创意在每一笔间闪耀。演绎您独特的风采,从每个手写字开始。欢迎来到我们的在线手写字网站,为您呈现精心设计的手写字体,赋予文字以温暖和个性。从笔画间感受真挚,从每一行感知独特,让您的字迸发出与众不同的魅力。点击即刻体验,http://www.520transform.cn/
25.2023记者节活动策划书(15篇)2、签名征集活动 制做一面写有“新闻随处可见,记者就在身边——《我的大学》驻南山学院记者站”的横幅,在每次体验活动的采访结尾,邀请被采访人签名留念。 3、模拟“高端访谈” 诗社成员分成6个小组,5个小组负责采访各班班主任,一个小组负责采访院领导。 https://www.xuexila.com/fwn/fwn/c2151004.html
26.企业策划书(15篇)(4)网站平台缩短了企业与用户的洽谈周期,这是因为在洽谈前,双方可以先通过网站有一个深入的了解。 (5)网站平台的应用使产品多样化、柔性生产、按订单制作成为可能。这样将大大降 (6)网站平台可为企业的新产品开发提供更准确的信息,由于通过电子手段,可以廉价地与大量客户和潜在客户交流,这样将大大提高新产品定位的https://www.oh100.com/a/202212/5792544.html
27.记者节活动方案(合集15篇)为了确保事情或工作能无误进行,我们需要事先制定方案,方案是为某一行动所制定的具体行动实施办法细则、步骤和安排等。写方案需要注意哪些格式呢?下面是小编帮大家整理的记者节活动方案,欢迎阅读,希望大家能够喜欢。 记者节活动方案1 一、 活动背景 11月8日是中国记者节。1937年11月8日,以范长江为首的左翼新闻工作https://www.cnfla.com/huodongfangan/3071594.html
28.国学常识100题,看你能答对几题!51开心Go阅读网经过火烤处理的竹简刻字方便且防虫蛀所以火烤是竹简制作的重要工序。当时人们把这个工序叫做“杀青”,也叫“汗青”“汗简”。“杀青”一词就是这样来的。 后来有了笔,于是,简牍上的字可以不用刀刻而用笔写了。那时候,人们写文章常常用毛笔把初稿写在竹青上因为竹青光滑,要修改只须揩去就行了,初稿改定后,就https://www.51kxg.com/index.php/archives/5144
29.超牛逼工具箱之艺术签名免费在线设计,快来设计漂亮霸气的签名就是艺术签名的在线免费设计,可以设置各种格式的艺术签,提供的免费设置艺术签的格式有:一笔艺术签、一笔商务签、雪峰字、行书签名、黑体签名、楷体签名、明星手写签名、草书签名、钢笔签名、真人签名、手写字签名、连笔草书签名、猫猫签名、情书常规签名、娃娃签名、萝莉签名、太极签名、火柴签名、嘟嘟签名等等艺术签名https://mznzd.com/?p=1479