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

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

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


相关文章

Telegram Mini小程序开发介绍

Telegram Mini小程序基于Javascript开发语言,是集成在Telegram应用内的轻量化网页应用。类似微信小程序,可以直接在Telegram对话或群组中运行而无需单独下载。Telegram小程序支持的应用程序:Teleg...

Nginx环境下php下缓存问题的解决

nginx环境下php缓存问题的解决

开发一个鸿蒙APP应用要多少钱?

最近有很多客户咨询,想要开发鸿蒙APP应用,但是开发一个鸿蒙APP要多少钱呢?和普通的安卓APP相比,价格是贵还是便宜呢?今天丁老师来介绍一下。鸿蒙应用,特别是采用原生鸿蒙技术栈,比如ArkTS/ArkUI进行开发,费用成本大概与普通安...

Mysql中5.7以下版本对Json数据的处...

在Mysql中,5.7以下版本是不支持Json对象的,但是可以将数据以json字符串的形式,保存在数据库的text字段中。以下是针对Mysql5.7以下版本json字符串的一些处理方法。#根据键值name查询(需要注意单双引号) sel...

推荐文章

photoshop打不开任何文件的解决方法

有同学反应,在使用photoshop时,忽然文件打不开了,先后试了下psd格式、jpg格式、png格式的,等等等等,全都打不开,重启了电脑也不行,这是怎么回事呢?经过丁老师研究后发现,这是因为安装的是非正版photoshop,在使用时,没有...

CSS常用字体及网页引用方式

1.字体列表及引用链接鸿蒙字体 - B 站400 字重 CSS://s1.hdslb.com/bfs/static/jinkela/long/font/regular.css 500 字重 CSS://s1.hdslb.com/bfs/st...

性价比最高的内网穿透方案

内网穿透,是指外网可以访问内网,没有固定IP的服务器,所以需要中间件来进行通讯,目前稳定成熟的中间件软件,要么价格太贵,要么就是只能使用标准服务,不能完全的定制化。那么,到底有没有一个性价比最优的方案呢?回答是肯定的,答案就是使用云服务器+...

百度编辑器ueditor自动添加p标签换行的...

在实际工作中发现,有个编辑器每次保存或者修改后,都会自动在内容顶部和底部增加几行,烦人的很,一直找不到解决办法。后来发现原来是自己代码的问题。解决办法:内容在textarea中,不要换行不要写成:<textarea{content} ...