vue中的Canvas使用及说明

 更新时间:2025年10月28日 10:04:43   作者:m0_63466615  
文章详细介绍了HTML5 Canvas的模板区、样式区和脚本区的使用方法,包括如何设置Canvas的宽高、水平居中、获取Canvas元素、绘制图形(直线、矩形、圆、文字)、转换为Base64、下载图片以及加载图片并添加文字水印等操作

1.模板区(template)

(1) canvas的宽高只能通过在行内设置width和height,不能使用css设置,否则会导致图形拉伸

(2)当低版本的浏览器不支持canvas标记时,会把canvas展示为一个普通的标记,就会显示在canvas内部写的提示语,而如果浏览器支持canvas,内部的提示语则不会显示

<canvas width="700" height="700" ref="canvas">
        您的浏览器版本过低,不支持canvas,请升级浏览器或使用chrome浏览器
</canvas>
<button @click="save">保存Canvas</button>

2.样式区(style区)

canvas实际上是一个内联元素,要设置它在页面水平居中,需要把它设置为块级元素,(再次声明,不可以在css里设置canvas的宽高)

canvas {
    display: block;
    margin: 0 auto;
    border: solid 2px #999;
}

3.脚本区(script区)

(1)获得canvas

<script setup>
import { onMounted, ref } from 'vue'; // 从vue导入钩子函数和ref

// 找到canvas节点,可以使用js的document寻找,也可以使用vue的ref寻找

const canvas = document.querySelector('canvas')

const canvas = ref(null)

</script>

两个的区别就是:

用ref找到的canvas使用时需要使用canvas.value,

而document.querySelector找到的canvas使用时不需要加.value

(2)获取画笔

const ctx = canvas.getContext('2d') // 使用document找到的

const ctx = canvas.value.getContext('2d') // 使用ref找到的

(3)画线(两点确定一条直线)

ctx.beginpath() // 开启一条路径
ctx.moveTo(x1, y1) // 将画笔移动到一个点
ctx.lineTo(x2, y2) // 将画笔移动到第二个点
ctx.strokeStyle = '#333' // 设置描边的颜色
ctx.width = 3 // 设置线宽,取值为数值
ctx.stroke() // 开始画
ctx.closePath() // 关闭路径

(4)画矩形

ctx.beiginPath() // 如果不重新开启路径,会和上一次画的连上
ctx.fillStyle = '#0f0' // 填充样式
ctx.fillRect(x1, y1, x2, y2) // 填充
ctx.closePath()

(5)擦除

ctx.clearRect(x1, y1, x2, y2)

(6)画圆

ctx.beginPath() // 开启新路径
ctx.arc(x1, y1, 圆形半径, 角度值1, 角度值2,顺时针还是逆时针)
// 例如
ctx.arc(100, 100, 100, 0, Math.PI, true);
ctx.stroke()

(7)画字(写字)

ctx.font = '30px 微软雅黑'

ctx.fillText('文字内容', x1, y1)

ctx.fillText('canvas',100, 100) // 实心文字

ctx.strokeText('canvas', 100, 100) // 空心文字

(8)canvas转换base64地址

//用ref找到的元素,要加.value 
let base64 = canvas.value.toDataURL('image/jpeg', 1);

(9)下载canvas画的图

// 模板区绑定的save方法
cosnt save = () => {
    canvas.value.toBlob(blob => {
        let blobURL = URL.createObjectURL(blob);
        let aNode = document.createElement('a')
        aNode.href = blobURL 
        aNode.download = 'Canvas图片'
        aNode.click()
    })
}

(10)加载图片并加文字水印

let img = new Image()
image.src = '要加载的图片路径'
image.onload = () => {
    ctx.beginPath()
    ctx.drawImage(img, x1, y1)
    ctx.font = '30px 宋体'
    ctx.fillText('这是水印', x1, y1)
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue如何使用rem适配

    vue如何使用rem适配

    这篇文章主要介绍了vue如何使用rem适配,帮助大家处理vue开发移动应用时的兼容性问题,感兴趣的朋友可以了解下
    2021-02-02
  • Element el-table的formatter和scope template不能同时存在问题解决办法

    Element el-table的formatter和scope template不能同时存在问题解决办法

    本文主要介绍了ElementUI el-table 的 formatter 和 scope template 不能同时存在问题解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 解决Vue不能检测数组或对象变动的问题

    解决Vue不能检测数组或对象变动的问题

    下面小编就为大家分享一篇解决Vue不能检测数组或对象变动的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • tdesign vue初始化组件源码解析

    tdesign vue初始化组件源码解析

    这篇文章主要为大家介绍了tdesign vue初始化组件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Vue 中 template 有且只能一个 root的原因解析(源码分析)

    Vue 中 template 有且只能一个 root的原因解析(源码分析)

    这篇文章主要介绍了Vue 中 template 有且只能一个 root的原因解析,本文从源码角度分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • vue引用外部JS的两种种方法

    vue引用外部JS的两种种方法

    这篇文章主要介绍了vue引用外部JS的两种种方案,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Vue/React子组件实例暴露方法(TypeScript)

    Vue/React子组件实例暴露方法(TypeScript)

    最近几个月都在用TS开发各种项目,框架有涉及到Vue3,React18等,记录一下Vue/React组件暴露出变量/函数的方法的写法,对vue react组件暴露方法相关知识感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • Vue 报错-4058 ENOENT:no such file or directory的原因及解决方法

    Vue 报错-4058 ENOENT:no such file or directory的原因及解决方法

    Vue 报错-4058 ENOENT: no such file or directory的原因和解决办法,关于为什么为会报这个错误,按照字面意思的理解就是没有找到这个文件或这个路径,说明是路径不对,本文给大家分享解决方案,感兴趣的朋友一起看看吧
    2023-10-10
  • vue实现公共方法抽离

    vue实现公共方法抽离

    这篇文章主要介绍了vue实现公共方法抽离,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue实现点击导航栏当前标签后变色功能

    Vue实现点击导航栏当前标签后变色功能

    这篇文章主要为大家详细介绍了Vue实现点击导航栏当前标签后变色功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08

最新评论