博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转载) Chrome中canvas上drawImage无法画出image的解决办法
阅读量:5909 次
发布时间:2019-06-19

本文共 1707 字,大约阅读时间需要 5 分钟。

在自己写demo的过程中 碰到了这样一个问题 发现drawImage方法没有达到预期的效果 图片没办法显示 而fillRect等画图形的方法却工作良好

大概的代码如下:

 

Js代码  
1 $(function() {  2     var $my_canvas=$("#my_canvas");  3     var my_canvas=$my_canvas[0];  4     var context=my_canvas.getContext("2d");  5     // var footprint_img=document.getElementById("footprint");  6     var footprint_img=new Image();  7     footprint_img.src="footprint.jpg";  8     context.drawImage(footprint_img,10,10,20,20);  9 });

在和伙伴交流的情况下 发现在google help下也有人碰到了类似问题

描述了该问题 发现同样的代码在FireFox下工作良好 但是Chrome却无法绘制 并且刷新也无用 不过 如果在地址栏敲一下回车 却可以看到绘制的图片 (震惊)

 

之后请教了几位大神 被告知是由于image加载是异步的 而我在image没有加载完毕时就调用了drawImage造成的(好吧 我刚接触前端 这些东西都不注意 大家别拍脸)

 

于是上网查了关于image预加载的一些方法 最后找到了一篇排版不错 说明也很好的文章(有的文章一看就转来的 也不写转帖 也不重新排版 代码就那么混乱着 完全不想看啊)

别看是百度空间就不看。。觉得说得挺清楚的 特别对于我这样的新手

具体的原理 在上文中已经说了 概括下就是在确保图片加载的情况下再去做相关动作(这是废话,文中更循序渐进)

 

改进后的代码如下:

 

Js代码  
1 $(function() {   2     var $my_canvas=$("#my_canvas");   3     var my_canvas=$my_canvas[0];   4     var context=my_canvas.getContext("2d");   5     // var footprint_img=document.getElementById("footprint");   6     // var footprint_img=new Image();   7     // footprint_img.src="footprint.jpg";   8     preImage("footprint.jpg",function(){   9         context.drawImage(this,10,10,20,20);  10     });  11 });  12   13 function preImage(url,callback){  14      var img = new Image(); //创建一个Image对象,实现图片的预下载  15      img.src = url;  16      17     if (img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数  18          callback.call(img);  19         return; // 直接返回,不用再处理onload事件  20      }  21   22      img.onload = function () { //图片下载完毕时异步调用callback函数。  23          callback.call(img);//将回调函数的this替换为Image对象  24      };  25 }

 

 

转载:

加载图片相关的文章:

 

 

转载于:https://www.cnblogs.com/eoooxy/p/6069815.html

你可能感兴趣的文章
LINUX任务(jobs)详解 (转)
查看>>
分享14个jQuery插件开发人员易犯的错误
查看>>
两个excel宏病毒
查看>>
ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2
查看>>
vi编辑器使用介绍
查看>>
Microsoft Visual Studio 发展历史
查看>>
php对数组中的值进行排序
查看>>
BZOJ 1207 DP
查看>>
【译】Android系统架构
查看>>
Java 9将采用新的版本字符串格式
查看>>
winsocket <研究了一天的成果>
查看>>
hdu 1181 变形课
查看>>
[心跳] 使用心跳机制实现CS架构下多客户端的在线状态实时更新以及掉线自动重连...
查看>>
Docker-容器的操作
查看>>
PHP下载远程图片的3个方法
查看>>
Apache版本hadoop-2.6.0.tar.gz平台下搭建Hue
查看>>
在ubuntu16.04上编译android源码【转】
查看>>
Android JNI技术介绍【转】
查看>>
超文本
查看>>
servlet调用的几种方式
查看>>