收藏
回答

Canvas.toDataURL仅返回data:,?

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug Canvas.toDataURL 微信iOS客户端 8.0.39 2.33.0

const url = './WX20230713-152705@2x.png'


Page({
    data: {
        width: 256,
        height: 256,
    },


    async _dataurl() {
        let {node, width, height} = await new Promise(r => {
            wx.createSelectorQuery()
            .select('#canvas')
            .fields({node: true, size: true}, r)
            .exec()
        })
        console.log(node, width, height);
        let img = node.createImage()
        await new Promise(resolve => {
            img.onload = resolve
            img.src = url
        })
        node.getContext('2d').drawImage(img, 0, 0, width, height)
        let dataURL = node.toDataURL()
        if (dataURL.length > 6) {
            console.log(dataURL.length)
        } else {
            console.log(dataURL)
        }
    },


    plus() {
        let {width, height} = this.data
        width += 256
        height += 256
        this.setData(
            {width, height}, 
            this._dataurl
        )
    },


    minus() {
        let {width, height} = this.data
        width -= 256
        height -= 256
        this.setData(
            {width, height}, 
            this._dataurl
        )
    }
})


可以看到,在 Canvas 尺寸大于 1536 x 1536 时,直接返回了`data:,`,整个数据部分丢失


几个问题:

一、为什么随着 Canvas 尺寸的增加,DataURI 的长度却在变小?

二、为什么在并不大的尺寸下会丢失数据?

三、iOS、Android、开发者工具表现为何不一致?

四、这个接口成功返回的 Canvas 尺寸的阈值是多少?

回答关注问题邀请回答
收藏
登录 后发表内容