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: _ => {}
})
}
})

目前解决方法:
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)