收藏
回答

wx.canvasGetImageData电脑微信小程序上获取data一直是0?

wx.canvasGetImageData开发工具,手机微信都没问题,唯独pc端获取的图像数据一直是空数组,用尽办法还是空数组,什么加延迟,什么画布初始白色背景,什么缩放乘以dpr,什么先$nextTick,就是获取不到,真真难受。

这个问题多少年了,看了2个小时社区,19年就出现了,24年还有人在反馈,25年这个问题还在。

所谓的“官方人员不要回复,我不想听你们说《请提供测试代码片段》,提供后呢?没下文了,大概率是确实有问题,但关我鸟事,假装没看到,不想管。

各位大牛们,还有没有什么办法获取图像数据的,主要是想在pc端小程序做一个选择图片,并识别二维码的。现在用的jsQR库,但获取图像数据获取不到,就解析不了二维码了。

const this2 = this
uni.chooseImage({
	count: 1,
	sourceType: ['album'],
	success: chooseRes => {
		const qrCodePath = chooseRes.tempFilePaths[0]
		uni.getImageInfo({
			src: qrCodePath,
			success: imageInfo => {
				this.canvasOption.canvasWidth = imageInfo.width
				this.canvasOption.canvasHeight = imageInfo.height
				const ctx = uni.createCanvasContext(this.canvasOption.canvasId, this)
				ctx.setFillStyle('#FFFFFF')
				ctx.fillRect(0, 0, imageInfo.width, imageInfo.height)
				ctx.draw(true)
				ctx.drawImage(qrCodePath, 0, 0, imageInfo.width, imageInfo.height)
				ctx.draw(true, _ => {
					setTimeout(__ => {
						this.$nextTick(() => {
							wx.canvasGetImageData({
								canvasId: this.canvasOption.canvasId,
								x: 0,
								y: 0,
								width: this.canvasOption.canvasWidth,
								height: this.canvasOption.canvasHeight,
								success: imageData => {
									console.log(111, imageData)
									console.log(222, this.canvasOption)
								},
								fail: _ => {}
							}, this2)
						})
					}, 250)
				})
			},
			fail: _ => {}
		})
	}
})

回答关注问题邀请回答
收藏

2 个回答

  • 八月
    八月
    2025-06-23

    目前解决方法:

    1:canvas组件type="2d"。

    2:核心代码

    const canvas = await new Promise((resolve) => {
    	uni.createSelectorQuery()
    	.in(this)
    	.select(`画布id或画布class,id前面带上#,class前面带上.`)
    	.fields({node: true})
    	.exec(rst => {
    		resolve((rst[0] || {}).node)
    	})
    })
    if (!canvas) {
    	// 画布不存在
    	return
    }
    canvas.width = '画布宽度'
    canvas.height = '画布高度'
    const context = canvas.getContext("2d")
    const image = canvas.createImage()
    await new Promise((resolve, reject) => {
    	image.onload = resolve
    	image.onerror = reject
    	image.src = '图片地址'
    })
    context.save()
    context.drawImage(image, 0, 0)
    context.restore()
    const imageData = context.getImageData(0, 0, canvas.width, canvas.height)
    console.log('图片数据', imageData.data)
    
    2025-06-23
    有用
    回复
  • 智能回答 智能回答 该问答由AI生成
    2025-06-20
    有用
登录 后发表内容