vue+canvas踩坑之旅
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踩坑之旅的更多相关文章
- vue+ vue-router + webpack 踩坑之旅
说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案 老司机可以忽略下面的内容了 1)起因 考虑到数据分离的问题 因为server是express搭的 自然少 ...
- vue踩坑之旅 -- computed watch
vue踩坑之旅 -- computed watch 经常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确还是拿不到,这是多么痛苦而又令人忍不住抓耳挠腮,捶胸顿足啊 技术点 v ...
- 微信小程序之mpvue+iview踩坑之旅
因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- Python踩坑之旅其一杀不死的Shell子进程
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...
- Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 Github: https: ...
- [代码修订版] Python 踩坑之旅 [进程篇其四] 踩透 uid euid suid gid egid sgid的坑坑洼洼
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 公 ...
- Vue + TypeScript 踩坑总结
vue 和 TypeScript 结合的情况下,很多写法和我们平时的写法都不太一样,这里总结我项目开发过程中遇到的问题和问题的解决方案 有些问题可能还没解决,欢迎各位大佬给与提点. 另外,使用本文前可 ...
- CentOS7使用tar.gz包安装MySql的踩坑之旅
由于客户的CentOS服务器没有安装yum工具,只能通过下载tar.gz包安装mysql,于是跟着万能的百度开启了漫漫踩坑之旅: 1.下载mysql-5.6.33-linux-glibc2.5-x86 ...
随机推荐
- beego 初体验 - 基础模块 - config, httplibs, logs
beego 的基础模块支持了一些web开发常用的功能. 配置,http操作库,日志 配置模块: 这是我的配置文件 如何读取: httplibs:这是一个利用 httplibs 发起 get 请求的示例 ...
- Vue 组件&组件之间的通信 之组件的介绍
什么是组件? 组件Component,可扩展HTML元素,封装可重用的代码.通俗的来说,组件将可重用的HTML元素封装成为标签方便复用: 组件的使用: 1.使用全局的方法Vue.extend创建构造器 ...
- inotify+rsync架构实现实时同步
前序 使用inotify+rsync架构实现(文件夹/文件)实时同步, 双机之间需要ssh免密码配置(两步完成ssh免密码登录) 环境 客户端:192.168.137.176 (rsync + ino ...
- 基本数据类型大总结(int,str,list,dict,tuple)
python基本数据类型 int==>整数,主要用来进行数学运算 str==>字符串,可以保存单一数值 bool==>判断真假,true,false list==>存储大量数据 ...
- flask --- 02. 路由, 初始化配置,蓝图
一.Flask 路由 1.添加路由的方式 ① ② 实例: ① @app.route("/my_de") def detail() ② def detail() app.add_ur ...
- sqlserver 判断字符串是否是数字
https://www.cnblogs.com/zjfblog/p/5625202.html sql2005有个函数ISNUMERIC(expression)函数:当expression为数字时,返回 ...
- WEB 前端插件整理
Vs Code 系统插件 #1 Bracket Pair Colorizer 让括号拥有独立的颜色,易于区分.可以配合任意主题使用. #2 Code Runner 非常强大的一款插件,能够运行多种语言 ...
- 3、基于多播、安全认证的corosync集群(VIP、Httpd、Filesystem)
Messaging Layer --> CRM --> RA systemd:/usr/lib/systemd/system systemd有一个特性,即便一个服务开机启动,但是在 ...
- Bioconductor软件安装与升级
1 安装工具Bioc的软件包不能使用直接install.packages函数,它有自己的安装工具,使用下面的代码: source("https://bioconductor.org/bioc ...
- C语言获取Linux系统精确时间
gettimeofday()函数的使用方法 1.函数原型 #include <sys/time.h> int gettimeofday(struct timeval *tv, struct ...