let img=new Image(); if(img.complete) { console.log('dd'); }
img.src="http://localhost:8888/static/img/logo11.6d2b322.png"
img.onload = function() {
console.log('ff')
}
首先,一張圖片在定義 img.src="http://localhost:8888/static/img/logo11.6d2b322.png"的時候,img就已經結束了它的渲染,那么自然而然不會進到下面的onload的函數。
好的,現在把圖片往下調就可以
let img=new Image(); if(img.complete) { console.log('dd'); } img.onload = function() { console.log('ff') }
img.src="http://localhost:8888/static/img/logo11.6d2b322.png"
那么一次完整的vue+canvas繪制圖片的過程就如下所示:
let cans=document.getElementById("myCanvas"); let ctx=cans.getContext("2d"); let img=new Image(); img.onload = function(){ ctx.drawImage(img,50,50,100,100); ctx.strokeStyle = "#0695FF"; //定義矩形的顏色 ctx.strokeRect(50,50,100,100); ctx.strokeRect(50,170,100,100); }; img.src="http://localhost:8888/static/img/logo11.6d2b322.png" ctx.drawImage(img, 10, 10);
但是這個畢竟還是太撲街了,最后成功的demo如下
<template> <div> <h2> TestCanvas </h2> <img v-show="false" ref="myImg" src="../assets/logo.png" > <canvas ref="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;" > 您的瀏覽器不支持 HTML5 canvas 標簽。 </canvas> <button @click="downloadCanvas"> 下載 </button> </div> </template> <script> export default { name: "TestCanvas" , data () { return { } } , methods: { alert : function () { alert("emem") ; } , downloadCanvas : function () { // 內部函數1(可忽略細節) const saveFile = function(data, fileName){ let save_link = document.createElement('a'); save_link.href = data; save_link.download = fileName; let event = document.createEvent('MouseEvents'); event.initEvent("click", true, false); save_link.dispatchEvent(event); }; // 內部函數2(可忽略細節) const imgType = function (ty) { let type = ty.toLowerCase().replace(/jpg/i, 'jpeg'); var r = type.match(/png|jpeg|bmp|gif/)[0]; return 'image/' + r; } ; const type = 'png'; //設置下載圖片的格式 const cans = this.$refs.myCanvas ; //canvas實例子 const img_png_src = cans.toDataURL("image/png"); //將canvas保存為圖片 const imgData = img_png_src.replace(imgType(type),'image/octet-stream'); const filename = 'canvas' + '.' + type; //下載圖片的文件名 // shoot saveFile(imgData,filename); } } , mounted: function () { console.log("掛載成功") ; var c=this.$refs.myCanvas ; var ctx=c.getContext("2d"); var img=this.$refs.myImg; // 貼圖 ctx.drawImage(img,0,0); ctx.font="10px Arial"; // 打水印 ctx.fillText("Kingdee",160,90); } } </script>