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,,,,);
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, , );

但是这个毕竟还是太扑街了,最后成功的demo如下

<template>
<div>
<h2>
TestCanvas
</h2> <img
v-show="false"
ref="myImg"
src="../assets/logo.png"
>
<canvas
ref="myCanvas"
width=""
height=""
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/)[];
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,,);
ctx.font="10px Arial";
// 打水印
ctx.fillText("Kingdee",,);
}
}
</script>

vue+canvas踩坑之旅的更多相关文章

  1. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

  2. vue踩坑之旅 -- computed watch

    vue踩坑之旅 -- computed watch 经常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确还是拿不到,这是多么痛苦而又令人忍不住抓耳挠腮,捶胸顿足啊 技术点 v ...

  3. 微信小程序之mpvue+iview踩坑之旅

    因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

  4. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  5. Python踩坑之旅其一杀不死的Shell子进程

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...

  6. Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 Github: https: ...

  7. [代码修订版] Python 踩坑之旅 [进程篇其四] 踩透 uid euid suid gid egid sgid的坑坑洼洼

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 公 ...

  8. Vue + TypeScript 踩坑总结

    vue 和 TypeScript 结合的情况下,很多写法和我们平时的写法都不太一样,这里总结我项目开发过程中遇到的问题和问题的解决方案 有些问题可能还没解决,欢迎各位大佬给与提点. 另外,使用本文前可 ...

  9. CentOS7使用tar.gz包安装MySql的踩坑之旅

    由于客户的CentOS服务器没有安装yum工具,只能通过下载tar.gz包安装mysql,于是跟着万能的百度开启了漫漫踩坑之旅: 1.下载mysql-5.6.33-linux-glibc2.5-x86 ...

随机推荐

  1. 台式电脑、笔记本快捷选择启动项Boot 快捷键大全

    我们在安装系统时,会去设置电脑是从硬盘启动.U盘启动.光驱启动.网卡启动. 一般设置的方法有两种:一种是进BIOS主板菜单设置启动项顺序:另一种就是我在这里要介绍的快捷选择启动项. 以下是网友整理的各 ...

  2. 关于EasyUI查询功能的二级联动

    EasyUI 二级联动 data-options="multiple:true" 属性可实现对于车牌号的多选.

  3. Vue系列之 => computed实现求值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. Delphi文件目录操作(转载)

    Delphi判断文件夹(目录)是否存在,不存在就创建一个,可以一次创建多级目录 procedure TForm1.Button1Click(Sender: TObject);begin if not ...

  5. Kubernetes持久化存储2——探究实验

    目录贴:Kubernetes学习系列 一.简介 本文在“创建PV,创建PVC挂载PV,创建POD挂载PVC”这个环境的基础上,进行各种删除实验,并记录.分析各资源的状态. 二.实验脚本 实验创建了一个 ...

  6. Linux服务器---百科mediawiki

    Mediawiki         Mediawiki是一个强大的维基软件,可以实现页面编辑.图像和多媒体管理. 1.下载mediawiki软件(“https://www.mediawiki.org/ ...

  7. vue不通过路由直接获取url中参数的方法示例

    vue不通过路由直接获取url中参数的方法示例 vuejs取得URL中参数的值地址:http://localhost:3333/#/index?id=128console.log(this.$rout ...

  8. 解决 img 标签上下出现的间隙

    我们在平常的开发过程中,经常需要使用多张图片,而使用多张图片的时候,一般会去使用一个列表来对我们的img进行承装.就算我们把img的外边距和内边距全部清空了,但是这时会发现图片上下单会多出一定的间隙. ...

  9. 51Nod 1058 N的阶乘的长度

    输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3.   Input 输入N(1 <= N <= 10^6) Output 输出N的阶乘的长度 Input示例 6 Out ...

  10. C#调用endtask

    原文最早发表于百度空间2009-03-23 写这个小工具主要是因为自动化测试那边反馈了一个问题和endtask有关,结果写完之后发现这个问题从程序外部测试不了……c#调endtask主要也是用DllI ...