目录

1.模板区(template)

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

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

2.样式区(style区)

3.脚本区(script区)

        (1)获得canvas

(2)获取画笔

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

(4)画矩形

(5)擦除

(6)画圆

(7)画字(写字)

(8)canvas转换base64地址

(9)下载canvas画的图

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


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)
}