首页 > 原创文章 > 软件开发 > 查看文章

uQRCode生成二维码出现Failed to execute drawImage on CanvasRenderingContext2D错误的解决方法

所属分类:软件开发 来源: 丁老师原创 更新时间:2026-09-09 08:19 浏览: 62 IP属地: 深圳
安卓APP IOS应用 鸿蒙APP定制开发

有同学咨询,在开发APP和小程序时,使用uQRCode来生成二维码,之前用着好好的,功能一切正常,但是突然某个时刻不能用了,生成时报错:

//小程序端错误信息
[渲染层错误] [Component] <canvas>: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0. Error: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0.
at l.methodsHandler [as _invokeCanvasMethod] ([http://127.0.0.1:30752/](http://127.0.0.1:30752/)**pageframe**/**dev**/WAWebview.js?t=wechat&v=3.16.2:1:2146727)(env: Windows,mp,2.01.2510290; lib: 3.16.2)
qrcode.vue:118 {errMsg: "canvasToTempFilePath:fail executeCanvasMethod fail… is a canvas element with a width or height of 0."}(env: Windows,mp,2.01.2510290; lib: 3.16.2)

//APP端错误信息
返回‌‌[object DOMException] at view.umd.min.js:1

这是怎么回事呢?今天丁老师不仅给你修复,还给你分析解答。

首先,看一下这位同学使用uQRCode的生成二维码的代码:

uQRCode.make({
	canvasId:'qrcode',
	componentInstance:this,
	text:'丁老师软件顶呱呱',
	size:360,
	margin:10,
	backgroundColor:'white',
	foregroundColor:'#000000',
	fileType:'jpg',
	correctLevel:uQRCode.errorCorrectLevel.H,
	success:res=>{
		console.log('ok')
	},
	fail:(err)=>{
		uni.hideLoading();
		console.error(err);
	}
});

从代码上看,这个方法是没有任何问题的,丁老师也有亲测复制这个代码进行测试,是可以正常使用的,那么问题到底出在哪里呢?在同样的环境下,代码没有变动过,之前用着好好的,突然不能用了,那就说明,肯定不是这段代码的原因,而是别的地方除了问题。

从代码上看,我们可以看到,这个uQRCode是生成到一个叫qrcode的Canvas对象上,我们见一下这个对象:

<view class="hidden">
	<canvas class="canvas" canvas-id="qrcode" :style="'width:'+qrcode_width+'px;height:'+qrcode_width+'px;'" />
</view>

这个canvas对象本身没有什么问题,但为什么外层多了一个hidden的class,嗯。。检查一下。

.hidden {display:none;}

突然发现,这个.hidden是隐藏的,加了display:none;嗯,问题应该出在这里了,这个canvas被隐藏了,猜测应该是uQRCode找不到对象,所以就生成失败,我们把这个hidden的display:none去掉一下进行测试。

果然,功能恢复正常,uQRCode又可以生成二维码了!原来如比!这个uQRCode关联的Canvas对象,是不能隐藏的啊!你隐藏了,uQRCode就找不到canvas对象,就没法正常生成啊!怪不得你说代码没有动过就不能使用了,因为你没有动过js的代码,但是改了css,影响到功能使用了!

我明白这位同学的意思,他可能想生成二维码做后续使用,所以不想让这个canvas显示出来,但是要记得啊!canvas本身和他的上层,千万不能隐藏,隐藏了就不能用了!如果真想要隐藏,也不要使用display:none的方式,可以使用其他方式来隐藏,即主打一个视觉看不见,但他还存在的方式进行隐藏。

//附:非display:none的隐藏方式
width:0;height:0;opacity:0;position:absolute;z-index:-99;overflow:hidden;


相关文章

丁老师淘宝采集插件demo

丁老师淘宝采集插件demo

C#开发的Winform程序如何把dll放到...

有同学咨询,使用Visual Studio工具C#开发的Winform程序,生成后软件目录全是大量dll文件,看起来杂乱无章,有没有什么办法能让他统一放到一个文件夹里边呢?丁老师对此问题进行解答。为什么会产生大量的dll文件?因为在使用...

怎么样合并一个或多个PDF文件?

经常有小伙伴问丁老师,说扫描出来的PDF图片,都是一个一个的,怎么样把他们合并成一个文件呢?我说你去下载一个PDF工具就好了呀,有某某PDF共阅读器、编辑器嘛。小伙伴说不行呀丁老师,因为网上的这些PDF工具有以下缺点:1.体积太大。动辄...

php调用美图秀秀插件上传头像

丁老师教你如何用php调用美图秀秀插件实现头像上传的功能。

推荐文章

Uniapp开发微信小程序怎么模拟位置?

废话不多说,直接上货。在微信开发者工具调试栏,找到Sensor(传感器)。Geolocation,勾选启用,下边输入经纬度即可!

VideoJs宽度高度自适应100%的方法

videojs是一款非常不错的html video播放器插件,很多同学经常在群里问我,说丁老师这个videojs怎么设置为宽度或者高度自适应呢,不想把video的width和height写死,有没有什么办法呢。丁老师经过研究发现啊,vide...

微信小程序开发生成普通二维码打开小程序的方法

在开发微信小程序的过程中,生成的是带有logo的小程序二维码,并且这个二维码不是通用的二维码,而是只能用微信打开的专属二维码,如图:遇到这样一个需求,生成的二维码要方形的通用二维码,并且不能带有小程序的logo。这种该怎么实现呢?经过查询,...

CodeIgniter框架URL如果去掉in...

在使用PHP框架CI时,有个很恶心的地方就是他的URL需要带上index.php,比如我要建一个user模块,想要实现www.xxx.com/user/的效果,但是在CI框架下必须要www.xxx.com/index.php/user这样才...