vue中的Canvas使用及說明
1.模板區(qū)(template)
(1) canvas的寬高只能通過在行內(nèi)設(shè)置width和height,不能使用css設(shè)置,否則會導(dǎo)致圖形拉伸
(2)當?shù)桶姹镜臑g覽器不支持canvas標記時,會把canvas展示為一個普通的標記,就會顯示在canvas內(nèi)部寫的提示語,而如果瀏覽器支持canvas,內(nèi)部的提示語則不會顯示
<canvas width="700" height="700" ref="canvas">
您的瀏覽器版本過低,不支持canvas,請升級瀏覽器或使用chrome瀏覽器
</canvas>
<button @click="save">保存Canvas</button>2.樣式區(qū)(style區(qū))
canvas實際上是一個內(nèi)聯(lián)元素,要設(shè)置它在頁面水平居中,需要把它設(shè)置為塊級元素,(再次聲明,不可以在css里設(shè)置canvas的寬高)
canvas {
display: block;
margin: 0 auto;
border: solid 2px #999;
}3.腳本區(qū)(script區(qū))
(1)獲得canvas
<script setup>
import { onMounted, ref } from 'vue'; // 從vue導(dǎo)入鉤子函數(shù)和ref
// 找到canvas節(jié)點,可以使用js的document尋找,也可以使用vue的ref尋找
const canvas = document.querySelector('canvas')
const canvas = ref(null)
</script>兩個的區(qū)別就是:
用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' // 設(shè)置描邊的顏色 ctx.width = 3 // 設(shè)置線寬,取值為數(shù)值 ctx.stroke() // 開始畫 ctx.closePath() // 關(guān)閉路徑
(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('文字內(nèi)容', x1, y1)
ctx.fillText('canvas',100, 100) // 實心文字
ctx.strokeText('canvas', 100, 100) // 空心文字(8)canvas轉(zhuǎn)換base64地址
//用ref找到的元素,要加.value
let base64 = canvas.value.toDataURL('image/jpeg', 1);
(9)下載canvas畫的圖
// 模板區(qū)綁定的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)
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Element el-table的formatter和scope?template不能同時存在問題解決辦法
本文主要介紹了ElementUI?el-table?的?formatter?和?scope?template?不能同時存在問題解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Vue 中 template 有且只能一個 root的原因解析(源碼分析)
這篇文章主要介紹了Vue 中 template 有且只能一個 root的原因解析,本文從源碼角度分析給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Vue/React子組件實例暴露方法(TypeScript)
最近幾個月都在用TS開發(fā)各種項目,框架有涉及到Vue3,React18等,記錄一下Vue/React組件暴露出變量/函數(shù)的方法的寫法,對vue?react組件暴露方法相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-11-11
Vue?報錯-4058?ENOENT:no?such?file?or?directory的原因及解決方法
Vue?報錯-4058?ENOENT:?no?such?file?or?directory的原因和解決辦法,關(guān)于為什么為會報這個錯誤,按照字面意思的理解就是沒有找到這個文件或這個路徑,說明是路徑不對,本文給大家分享解決方案,感興趣的朋友一起看看吧2023-10-10
Vue實現(xiàn)點擊導(dǎo)航欄當前標簽后變色功能
這篇文章主要為大家詳細介紹了Vue實現(xiàn)點擊導(dǎo)航欄當前標簽后變色功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08

