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

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

所属分类:软件开发 来源: 丁老师原创 更新时间:2026-09-09 08:19 浏览: 489 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;


相关文章

微信支付常见问题及解决办法

微信支付常见问题及解决办法

短信网址/html网页打开APP和小程序的方...

应用场景场景1:使用APP或小程序,分享给别人的网页内容,当用户打开这个网页内容时,可以自动打开APP或小程序。场景2:短信群发给目标人群,短信内容包含短网址,打开短网址后,可以打开APP或小程序。实现方法:无论是场景1还是场景2,其技...

CodeIgniter上传提示upload ...

在开发CodeIgniter的上传功能时,提示upload path does not appear to be valid,说是上传路径错误,但是仔细检查了设置的路径是对的。怎么还出现这个提示呢?经过丁老师研究,是因为CodeIgni...

软著申请需要哪些材料?费用多少钱?多久能办理...

经常有客户咨询丁老师,想对自己开发的软件申请软件著作权,都需要什么材料,需要多少钱,办理下来需要多久呢?今天丁老师就对这个问题进行统一解答。申请软著所需材料1.软件程序源码,要求前30页和后30页,每页不少于50行代码。2.软件用户手册...

推荐文章

Mui的toast修改位置居中

mui的toast默认是在底部的,并且没有参数设置位置,经过研究发现可以通过修改css的方式设置位置,具体方法如下:1.mui toast设置type为divmui.toast('hello', { type: 'd...

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

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

IDEA IDE换行自动显示的}括号如何去掉

在使用idea旗下的产品,如intellij idea,php storm,web storm时,有的时候编辑前端页面JS,在换行时经常会自动出现个}大括号,这一点程序不是很智能,其实后边都已经有括号了。比如下图这样:那么如何解决这个问题呢...

宝塔"在未指定SSL默认站点时,未开启SSL...

宝塔系统相关问题解决方法