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.一笔签名设计在线生成潇洒实用的顶尖手写艺术签名设计,完全免费,在线生成,让您受益终生! 在线生成后一笔签名拥有的清晰度很高:780*520像素,请直接输入您的姓名,接着免费在线设计即可。 特别提醒:一笔签和连笔签字库齐全,已经更新了姓名中的偏僻汉字,请放心设计。http://www.yishuzi.com/b/m25.htm
2.在线签名设计免费版在线艺术签名设计这款在线艺术签名设计软件融入了多种字体风格,通过我们对字体的重新优化设计与组合,让它达到对签名设计需求的更高要求,比如笔画连接更自然,笔锋更精细,字体文件大小优化让生成更快,用户体验更好等,如果你觉得设计出来的签名效果很满意就赶紧收藏哦。 更多款式:签名设计http://www.uustv.com/
3.艺术签名设计免费版艺术签名在线生成草书签名/点图片快速生成 艺术签名设计免费版提供整整四十五款的艺术签名风格供您在线生成,每一款都是精品,让您可以随心所欲的进行在线签名设计。适合签名使用的各种场合,适合每一个年龄层次,从大人到小孩子,从商务合同上的签字需求到校园作业本上的名字写作都能完全满足您的设计要求,楷书、行书等非常适合正式签字场合http://www.akuziti.com/cs/lbqm.php
4.一笔签名设计在线生成一笔签名设计免费版在线生成-顶尖手写艺术签名设计图 潇洒实用的顶尖手写艺术签名设计,完全免费,在线生成,让您受益终生! 在线生成后一笔签名拥有的清晰度很高:780*520像素,请直接输入您的姓名,接着免费在线设计即可。 特别提醒:一笔签和连笔签字库齐全,已经更新了姓名中的偏僻汉字,请放心设计。http://www.jiqie.com/a/m15.htm?d=123
5.手写签名关于手写签名的定义,相信大家都知道用手写出来的签名就叫手写签名。其实在很多地方手写签名已经被很的的软件都替代了。现在都是科技时代了,电脑绝大部分都弥补了手写签名这块了,但是我们中国是上下五千年的文明时代,我们中华民族的传统是肯定不能失去的。文化必须一直流传下去才可以的,手写其实在很多时候都是很好看的,复https://xizhiqm.cn/article/Py1n1iMEZ6QUowEjHEFZ
6.设计个性签字签名免费生成设计个性签字在线预览转换关键词列表>设计个性签字 预览签名 宝隶签生成签名 卡通签生成签名 智情体生成签名 颜黛写生成签名 钢笔行生成签名 热力错生成签名https://www.qianming.cn/keywords/175669
7.在线生成签名图片手写签名并下载PNG透明图片本工具适用于各种需要上传本人签名图片的网上报名、生成带签字电子报告单等用途https://www.gaitubao.com/signature
8.在线设计个性签名专题模板在线设计个性签名图片素材下载我图网在线设计个性签名专题为您整理了110个原创高质量在线设计个性签名图片素材供您在线下载,PSD/JPG/PNG格式在线设计个性签名模板下载、高清在线设计个性签名图片大全等,下载图片素材就上我图网。https://so.ooopic.com/sousuo/104388/
9.签名图片在线生成器图片字体分类发现字体签名图片在线生成器 标签: 图片 最后更新: 2024-12-01 共 5个字体 简介: 签名图片在线生成器 FuturaStd-CondensedBold语言:英文 下载 Marriage Script Normal语言:英文 下载 Mars Colony语言:英文 下载 Marsei-Bold语言:英文 下载 Marsei-DemiBold语言:英文http://www.qiuziti.com/fontlist2?id=787207
10.在线签名保存签名图片清空签名电脑端移动端都适合// 清除签名 document.getElementById('clear').addEventListener('click', function () { signaturePad.clear(); }); // 获取签名图片的Base64编码 document.getElementById('getSignature').addEventListener('click', function () { var data = signaturePad.toDataURL('image/png'); http://tpketang.com/index/article/169.html
11.一笔签名设计免费版在线生成潇洒实用的顶尖手写艺术签名设计,完全免费,在线生成,让您受益终生! 在线生成后一笔签名拥有的清晰度很高:780*520像素,请直接输入您的姓名,接着免费在线设计即可。 特别提醒:一笔签和连笔签字库齐全,已经更新了姓名中的偏僻汉字,请放心设计。http://jiqie.zhenbi.com/a/15.htm
12.签名生产图片在线制作软件零代码企业数字化知识站在许多场景下,签名图片不仅仅是简单的文字,还需要搭配适合的背景来增强视觉效果。在线签名图片制作软件通常支持用户自定义背景,用户可以选择纯色背景、渐变背景,甚至上传自己的图片作为背景。这一功能使得签名图片不仅在内容上独特,在视觉上也更具吸引力。例如,用户可以选择与品牌色调一致的背景,或是配合特定活动主题的背景https://www.jiandaoyun.com/blog/article/391544/
13.Word文档如何在线签名?打开WORD文档,在文档里上传在白纸上签名的图片,并调整图片到合适的大小。https://www.3d66.com/answers/question_1380661.html
14.电子签名的制作方法(在线电子签名制作免费手写)电子合同以前签名一般都是需要手签,那遇到疫情居家办公怎么办呢?现在有电子签名就可以有效地解决这个问题,而且电子签名的制作方法也很简单,只要几分钟就能在线生成! 电子签名的制作方法 1、写下签名 在一张纸上写上签名,可以是白纸也可以是其他颜色的纸; 2、插入图片 https://m.fadada.com/notice/detail-9370.html
15.在线个性艺术签名设计免费版9:动态防伪签名是一款防止别人仿冒而设计的特殊艺术签名。 http://www./a/25.htm 10: 一笔英文艺术签名设计在线生成免费版。 http://www./a/24.htm 11:英文艺术签名设计免费版。 http://www./a/21.htm 12:中国顶尖设计师手写姓名签名图片,全球领先的500*200像素姓名签名档。 http://www.360doc.com/content/12/0121/07/11320946_453420307.shtml
16.在线个人签名设计素材网站图片免费下载在线个人签名设计,站酷提供丰富的图片素材,品牌设计,UI交互,动漫游戏,影视摄像等正版素材,站酷是设计师、摄影师、插画师、艺术家、创意人,设计创意首选中国设计师互动平台。https://www.zcool.com.cn/tag/ZODQ3MTMyNA==.html
17.怎么提取出图片里面的签名最新资讯方法二:使用在线工具 如果您不熟悉图像处理软件,或者您只是想要一个更简单的解决方案,那么您可以尝试使用一些在线工具来提取图片中的签名。 打开一个在线图像编辑器,例如Photopea。 上传您想要处理的图片。 使用相应的工具,如选择工具或修复工具,选择并提取签名区域。 https://tool.a5.cn/article/show/35071.html
18.艺术签名艺术签名在线生成艺术签名在线生成功能特色 方便快捷的设计体验 一键自动生成艺术签名,无需复杂的人工设计过程,省时又省力 艺术字体多样性 丰富的艺术字体可供在线选择,满足个性化的设计要求 字体样式自定义 支持自定义字体颜色、背景、描边等属性,创作出与众不同的艺术签名 https://www.gaituya.com/qianming/
19.艺术签名设计免费版在线生成图片预览1/1https://www.fxxz.com/viewimg_99957_0.html
20.电子签名工具工具?图像类? 电子签名图片 电子签名图片 简介 本工具支持手画签名并可下载为图片,可以根据需求自由设置图片大小、钢笔颜色及背景颜色。无论是制作电子版的中秋贺卡、结婚请帖,还是在电子合同上签名,都能帮助你提升效率。 使用说明 1、调整图片大小、钢笔颜色、背景颜色。 https://tool.lu/signature/
21.Python+Tkinter制作在线个性签名工具python这篇文章主要为大家分享如何利用Python中的Tkinter库制作一个简易的在线个性签名生成工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下+ 目录 思路:先选择在线签名网站,找到接口模拟请求,然后将生成的签名图片显示在 Tkinter 生成的 GUI 窗口上,最后保存生成的签名图片 选择网址为:http://www.uustv.com/ 首先https://www.jb51.net/article/239746.htm
22.艺术签名在线生成连笔签名在线生成器压缩图提供字体转换器,支持在线转换字体生成艺术字,用户打开网站输入文字即可生成自己喜欢的艺术字体,是一款非常好用的艺术字体编辑器。https://www.yasuotu.com/qianming
23.手机签名彩信个性彩信图片彩信设计彩信下载动画签名设计另类”如何体现这些年轻人所独有的元素,人手有之的手机无疑是最好的载体, 极富个性张扬,情趣优雅,随时随地可以炫一把的手机个性屏保,打造只属于自己的手机个性签名,是每一个时尚年轻人的向往,不管是你的名字还是爱人的人还是其它的承载特殊寓意的字体,发送给他人,表达情意,也可以作为你自己的手机待机图片,令你的http://www.yzqm.com/Home/MMS.html
24.更多签名在线生成器QQ表情签名在线生成器QQ搞笑图片朝夕网QQ功夫狸猫QQ表情图片三毛小子搞笑图片表情抽烟吸烟的QQ表情,装酷的图片表情Hami哈咪QQ表情大全,鬼马Hami哈咪图片方块熊猫囧囧兄弟图片,熊猫囧囧qq表情大全面团家族QQ表情,搞笑的面团家族食物图片BoBo熊猫和ToTo鸡QQ表情图片大眼鼓搞笑QQ图片黄小熊QQ表情大全,可爱黄色的小熊图片https://face.zhaoxi.org/tag.php?qqface=%E7%AD%BE%E5%90%8D%E5%9C%A8%E7%BA%BF%E7%94%9F%E6%88%90%E5%99%A8
25.实现文档在线签订(图片水印手写签名){ trno }} <pdf :url="contract_pdf_url" @closeLoadding="closeLoadding"/> <el-divider></el-divider> 签字: 请在下面进行签字 <el-divider></el-divider> <vue-esign ref="signature" :width="800" :height="230" :isCrop="isCrop" :lineWidth="lineWidth" :lineColor="lineColorhttps://surest.cn/archives/151/
26.签名设计简笔画在线生成简笔画图片大全签名设计简笔画在线生成 简笔画 手绘 线稿 421166简笔画 设计 矢量 矢量图 手绘 素材 线稿 李娜简笔画 简笔画签名设计免费版在线生成 魏字的简笔画 李白躺下来的简笔画 签名水印设计一笔签名商务签名花体连笔签名简笔签名设计免费版简笔画https://www.puchedu.cn/jianbihua/771b036a9f79f451.html
27.[分享]在线生成签名图闪字彩字ID卡魔术图片等的网站[分享] 在线生成签名图、闪字、彩字、ID卡、魔术图片等的网站 图片生成: http://pic.sdodo.com/ 彩字: http://igogo8.com/ 闪字:(需要注册~?) http://mm.tpp8.com/FlashText/ 字符画: http://mm.tpp8.com/asciihttp://vulsee.com/archives/vulsee_2006/0908_6839.html
28.金蝶云星空手写签名 允许审批人在移动端新增、更换本人的签名图片。 详细介绍——https://vip.kingdee.com/article/114312188466105856 列表过滤 从轻应用可以进入待办、已办、在办菜单列表,支持搜索过滤。可以按单据筛选、可以输入条件模糊查询待办任务内容。 列表高级过滤 https://vip.kingdee.com/article/182126
29.MakePic.com图片制造打造个性签名拒绝垃圾邮件生成个性印章请输入2-4个汉字,选择字体,系统生成印章.赶快生成印章,做为QQ表情发送给好友吧。并将网址推荐给好友: 姓名: 输入“周郎”,生成“周郎之印”; 输入“周伯通”,生成“周伯通印”; 输入“西门吹水”,生成“西门吹水”; 字体: 效果图:周郎之印 经典繁印篆(阴刻) 经典繁方篆(阳刻) 楷体繁(阴刻) 中隶书繁http://www.makepic.com/print.php
30.福昕阅读器图片转pdf分辨率怎么设置?如何为pdf添加签名?如何为pdf添加签名? 日常办公和学习中使用比较多就是PDF文件了,用过PDF文件的朋友都知道,这个电子文件最大的特点就是安全及稳定性,所以,很多朋友会习惯性的把其格式的文件转换成pdf,特别是遇到体积比较大的图片文件的时候那更是义无反顾的把图片转换为pdf文件,那么,该怎么把PDF转换成图片?把pdf文件转换成图片不https://www.foxitsoftware.cn/pdf-reader/jiaocheng/3273.html
31.签名设计字体gif动图动态图表情包下载SOOGIF为您提供签名gif动态图片,设计字体动图表情包下载,还有更多关于签名,设计,字体的动图内容,尽在SOOGIF。https://www.soogif.com/materialPage/0Yaz8+Js42M
32.正版iSignature电子签章系统TIF传真签章Tif和JPG图片文件签名●操作方便简单,采用浮动菜单、工具条操作的形式接收用户指令,极大的方便了用户的操作,在金格自主研发的iWebPicuture图片浏览器中输入指令,进行签章和数字签名操作; ●系统安全可靠,采用数字证书确认用户的身份,可将电子签章和TIF/JPG图片文件紧密绑定,一旦绑定区域被篡改,电子签章将失效; ●可随时对电子签章的可靠性及其http://shen.witcp.com/lianmeng/c13070525/t1865b916ccd.html