h***@126.com
h***@126.com
  • 发布:2021-11-15 10:56
  • 更新:2023-06-30 12:00
  • 阅读:2271

【报Bug】uni.canvasToTempFilePath函数不执行回调

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10

HBuilderX类型: 正式

HBuilderX版本号: 3.1.22

浏览器平台: Chrome

浏览器版本: 95

项目创建方式: HBuilderX

示例代码:

uni.canvasToTempFilePath({
x: 0,
y: 0,
width: 160,
height: 160,
destWidth: 160,
destHeight: 160,
fileType: 'jpg',
canvasId: 'myCanvas',
success: (res) => {

            console.log('rrrr', res);  

            // 判断回调函数  
            if (typeof callback === 'function') {  

                console.log('aaaaaaaaaaaaaaaa');  

                // 设置新的图片临时路径  
                this.$set(chooseImageRes.tempFilePaths, 0, res.tempFilePath);  

                console.log('chooseImageRes', chooseImageRes);  

                // 回调  
                callback(chooseImageRes, true);  
            }  
        },  
        fail: (err) => {  

            // 判断回调函数  
            if (typeof callback === 'function') {  

                // 设置新的图片临时路径  
                this.$set(chooseImageRes.tempFilePaths, 0, img);  

                // 回调  
                callback(chooseImageRes, false);  
            }  
        },  
        complete: () => {  

            console.log('complete');  

        }  
    });

操作步骤:

创建Canvas,画图,将Canvas绘制成临时文件路径

预期结果:

得到回调结果

实际结果:

回调完全不执行,包括success fail complete都不执行

bug描述:

uni.canvasToTempFilePath函数不执行回调,所有回调都不执行,无论是放到setTimeout里边还是放到ctx.draw的回调中都不执行~

2021-11-15 10:56 负责人:无 分享
已邀请:
DCloud_UNI_Anne

DCloud_UNI_Anne

未复现此问题,请升级至HBuilder X - 3.2.14-alpha试试

h***@126.com

h***@126.com (作者)

3.2.14.20211112-alpha 和 3.2.12.20211029版本都试过了,还是不行,uni.canvasToTempFilePath不执行任何回调,附件是示例代码,麻烦帮看看什么原因,多谢了~

  • tuanup

    我这边也遇到这个问题了,但我的原因是canvasId和标签上的canvas-id不一致。。。

    不过这不执行失败回调也不报错确实是uniapp的锅。

    2024-03-11 14:27

h***@126.com

h***@126.com (作者)

我新建了项目,把所有没有意义的代码都移除了~ 还是不行,不执行uni.canvasToTempFilePath的回调~ 详见附件的压缩包~ 麻烦看看是否能在您那运行一下这个项目试试看原因,主要不回调也不报错,实在不知道什么原因~ 其实我的目的就是解决uni.chooseImage上传图片会出现旋转的问题,另外,附件的图片是我用来测试的图片,显示器那个图片上传后图片会发生逆时针旋转90度的情况~ 如果有更好的处理uni.chooseImage上传图片旋转的问题的方法您也可以发给我试一下看看,多谢了~

DCloud_UNI_Anne

DCloud_UNI_Anne

空项目只用uni.canvasToTempFilePath文档内的示例代码,是否能复现你的问题?
不能的话你可以排除法,排查出来具体你哪一行导致的。

h***@126.com

h***@126.com (作者)

按照你说的,用示例代码做了测试,还是依然不执行~ 附件是相关页面代码,麻烦帮看一下~

h***@126.com

h***@126.com (作者)

或者您是否可以给我一个可以执行的项目,我看一下您那边是怎么写的~

h***@126.com

h***@126.com (作者)

可否给我发一个可以正常跑通的DEMO包?我试试在我机器上是否可以正常运行,我按照你说的方法都试过了,还是不行~

h***@126.com

h***@126.com (作者)

我看你项目里是直接加了canvas标签的,可以执行回调。我用uni.createCanvasContext函数创建的canvas就不行,这个怎么解?我其实不需要页面显示出来这个canvas,只是用它做一些图片旋转的操作~

DCloud_uniAD_HDX

DCloud_uniAD_HDX

API uni.createCanvasContext 并不是创建 canvas 组件,是获取 canvas 组件的上下文
API uni.canvasToTempFilePath 将 canvas 组件保存为一张图片,需要指定在模板中的 canvas-id
如果不想显示 canvas 只是用来处理图片的操作,可以在模板中设置 canvas 的样式 display: none 以隐藏

h***@126.com

h***@126.com (作者)

将模板中的canvas设置为display: none;的话,就取不到canvas元素对象了,报错,width和height为0

x***@xinletu.love

x***@xinletu.love

大佬,解决了吗?我也遇到这个问题了

  • 7***@qq.com

    有解决吗? 就是死活不进回调函数

    2022-05-25 16:54

  • 7***@qq.com

    排除下面两个方向

    (1)画布有高度

    (2)draw 里设置了延时

    2022-05-25 17:14

  • x***@xinletu.love

    回复 7***@qq.com: 没解决,改成后端画canvas了

    2022-06-21 10:55

LiuYangbin

LiuYangbin - sfgdfg

我也遇到了和你一样的问题 找了一天了。。 之前一直报错: getCanvasHandlers is not defined 。。没太注意, 然后我就把canvas 标签删除 重新写了一遍后 发现不会出现这个 :getCanvasHandlers is not defined 错误了 。。然后就执行了! 所以我猜测是因为canvas渲染的问题导致uni.canvasToTempFilePath不执行

  • LiuYangbin

    记得更改微信开发者工具中的调试库版本 位置在: 右上角 详情->本地设置->调试基础库 更改为 2.23.4或更旧的版本

    2022-07-19 11:02

1***@qq.com

1***@qq.com - 为了生活而拼搏

我也遇到了,在demo中,通过uni.chooseImage()选择图片后,通过canvas画出,然后旋转保存。在demo里一切正常,而在项目中就不行。麻了麻了麻了

m***@126.com

m***@126.com

uni.canvasToTempFilePath函数不执行回调,所有回调都不执行,无论是放到setTimeout里边还是放到ctx.draw的回调中都不执行~


这个有解决吗?一直不行呢

要回复问题请先登录注册