Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
程序员文章站
2023-12-13 23:00:40
1 前言
1.1 业务场景
图片储存在后台中,根据图片的地址,在vue页面中,查看图片,并根据坐标标注指定区域。
由于浏览器的机制,使用 window.locatio...
1 前言
1.1 业务场景
图片储存在后台中,根据图片的地址,在vue页面中,查看图片,并根据坐标标注指定区域。
由于浏览器的机制,使用 window.location.href 下载图片时,并不会保存到本地,会在浏览器打开。
2 实现原理
2.1 绘制画布
<el-dialog title="查看图片" :visible.sync="dialogjpg" append-to-body> <canvas id="mycanvas" width="940" height="570"></canvas> </el-dialog>
这里为了交互体验,使用了 element-ui 的弹窗方式。将canvas画布放到了弹窗中。
为了突出画布效果可以在css中设置一个边框。
#mycanvas { border: 1px solid rgb(199, 198, 198); }
2.2 绘制图片
// imageurl为后台提供图片地址 dodraw(imageurl){ // 获取canvas var canvas = document.getelementbyid("mycanvas") // 由于弹窗,确保已获取到 var a = setinterval(() =>{ // 重复获取 canvas = document.getelementbyid("mycanvas") if(!canvas){ return false } else { clearinterval(a) // 可以理解为一个画笔,可画路径、矩形、文字、图像 var context = canvas.getcontext('2d') var img = new image() img.src = imageurl // 加载图片 img.onload = function(){ if(img.complete){ // 根据图像重新设定了canvas的长宽 canvas.setattribute("width",img.width) canvas.setattribute("height",img.height) // 绘制图片 context.drawimage(img,0,0,img.width,img.height) } } } },1) },
context.drawimage() 方法的参数介绍,可参照 w3school
2.3 绘制矩形
context.strokestyle = "red" context.linewidth = 3; context.strokerect(x, y, width, height)
context 同上面的定义
strokestyle 矩形颜色
linewidth 矩形边框宽度
x,y,width,height 矩形位置加长宽
2.4 绘制线条
context.moveto(x1,y1) context.lineto(x2,y2) context.strokestyle = "red" context.linewidth = 3; context.stroke()
(x1,y1) (x2,y2) 线条的起点和终点坐标
strokestyle linewidth 线条的样式
2.5 绘制文字
context.font = "26px arial bolder" context.fillstyle = 'red' context.filltext(text,x,y)
font fillstyle 文字样式
text 文字内容
x,y 文字显示坐标
2.6 下载图片
// 图片地址和图片名称 downiamge (imgsrc, name) { let image = new image() image.setattribute('crossorigin', 'anonymous') image.onload = function () { let canvas = document.createelement('canvas') canvas.width = image.width canvas.height = image.height let context = canvas.getcontext('2d') context.drawimage(image, 0, 0, image.width, image.height) let url = canvas.todataurl('image/jpg') let a = document.createelement('a') let event = new mouseevent('click') a.download = name a.href = url a.dispatchevent(event) } image.src = imgsrc },
3 后记
这里只是列出canvas的基础使用,具体的交互和展示还需要更多的设计。
总结
以上所述是小编给大家介绍的vue使用canvas绘制图片、矩形、线条、文字,下载图片,希望对大家有所帮助