m***@163.com
m***@163.com
  • 发布:2020-12-09 14:11
  • 更新:2020-12-15 09:28
  • 阅读:504

【报Bug】荣耀V30 pro机型上使用uni.canvasToTempFilePath报错

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Win7 64位

HBuilderX类型: 正式

HBuilderX版本号: 2.9.8

手机系统: Android

手机系统版本号: Android 10

手机厂商: 华为

手机机型: 华为 荣耀V30 PRO

页面类型: vue

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
  1. 使用chooseImage方式生成canvas然后导出
    const qrCanvas = uni.createCanvasContext('test')  
    uni.chooseImage({  
     success: (res) => {  
            console.log(res.tempFilePaths[0])  
            qrCanvas.drawImage(res.tempFilePaths[0], 0, 0, 500, 500)  
            qrCanvas.setTextAlign('center')  
            qrCanvas.setFontSize(uni.upx2px(32))  
            qrCanvas.fillText(this.title, uni.upx2px(375), uni.upx2px(600))  
            qrCanvas.draw();  
     }  
    })
  2. 使用本地静态资源图片生成canvas然后导出
    const qrCanvas = uni.createCanvasContext('test')  
    qrCanvas.drawImage('/static/logo.png', 0, 0, 500, 500)  
    qrCanvas.setTextAlign('center')  
    qrCanvas.setFontSize(uni.upx2px(32))  
    qrCanvas.fillText(this.title, uni.upx2px(375), uni.upx2px(600))  
    qrCanvas.draw();
    uni.canvasToTempFilePath({  
    canvasId: 'test',  
    success: res => {  
        uni.saveImageToPhotosAlbum({  
            filePath: res.tempFilePath,  
            success() {  
                uni.showToast({  
                        title: '已保存到系统相册',  
                    icon: 'none'  
                });  
            },  
            fail(e) {  
                console.log(e)  
                uni.showToast({  
                    title: e,  
                    icon: 'none'  
                });  
            }  
        });  
    },  
    fail: e => {  
        console.log(e)  
        uni.showToast({  
            title: '图片导出失败',  
            icon: 'none'  
        });  
    }  
    });

操作步骤:
  1. 从本地相册中选取一张图片/直接从static文件夹中取一张图片
  2. 使用ctx.drawImage()绘制到canvas上
  3. 使用uni.canvasToTempFilePath()方法将canvas生成本地文件路径,并调用uni.saveImageToPhotosAlbum()保存至本地相册

预期结果:

提示保存成功

实际结果:

在canvasToTempFilePath()方法的fail回调用报错

canvasToTempFilePath:fail SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement' : Tainted canvases may not  be exported  

bug描述:

使用canvasToTempFilePath()方法将canvas导出图片时候报错,图片中无远程资源,均为本地资源。如果去掉图片则可以导出

2020-12-09 14:11 负责人:无 分享
已邀请:
chenli

chenli

离线打包,sdk升级到2.9.9+,再看看

该问题目前已经被锁定, 无法添加新回复