Vue使用Canvas绘制图片、矩形、线条、文字,下载图片


Posted in Javascript onApril 26, 2019

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绘制图片、矩形、线条、文字,下载图片,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 函数参数限制说明
Nov 19 Javascript
Javascript setInterval的两种调用方法(实例讲解)
Nov 29 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
基于iview-admin实现动态路由的示例代码
Oct 02 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
Mar 26 Javascript
详解vue中v-on事件监听指令的基本用法
Jul 22 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
Oct 22 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 #Javascript
js验证身份证号码记录的方法
Apr 26 #Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
Apr 26 #Javascript
react高阶组件添加和删除props
Apr 26 #Javascript
详解微信小程序-canvas绘制文字实现自动换行
Apr 26 #Javascript
vue 进阶之实现父子组件间的传值
Apr 26 #Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 #Javascript
You might like
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
php HandlerSocket的使用
2011/05/02 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python实现canny边缘检测
2020/09/14 Python
python中实现栈的三种方法
2020/12/19 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
大学生村官典型材料
2014/01/12 职场文书
2014年采购部工作总结
2014/11/20 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
Java 在生活中的 10 大应用
2021/11/02 Java/Android
Django框架中视图的用法
2022/06/10 Python