收藏
回答

wx.canvasToTempFilePath在安卓系统和苹果系统上获取的图片数据不一致?

问题描述:

在安卓系统中(小米6X 安卓9 v8.0.1)中裁剪指定大小的图片,不需要修改canvas组件的stype width和height,只修改canvas对象的宽高即可生成目标图片。

但在苹果手机中(苹果X IOS 14.4.1 v8.0.2)中需要修改canvas组件的width和height,同时需要修改canvas对象的宽高,并且需要重新获取canvas对象,才可生成目标图片

代码注释的情况下:

苹果:

安卓:

代码开启的情况下:

苹果:

安卓:

代码片段地址:https://developers.weixin.qq.com/s/8HaB9cmW7bpq

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

1 个回答

  • 武曲心
    武曲心
    03-31

    没苹果设备,实际你打印一下高宽看看,不过我认为应该和pixelRatio有关,画布的大小你用代码转换控制好应该就行,还有你代码片段里面用上了img.onload,之前我也发过一贴,这函数真机环境有问题,保险就用getImageInfo,还有获取对象还是用官方写法.exec取res[0].node吧

    03-31
    有用 1
    回复 11
    • 星光刀锋
      星光刀锋
      03-31
      感谢感谢!
      1、刚才测试将canvas宽高乘以pixelRatio,在苹果手机上还是获取不到想要的效果,与原来一样。画布生成临时地址,canvasToTempFilePath默认取得的是canvas上的整个数据。
      代码片段地址:https://developers.weixin.qq.com/s/woWqQcmj7PpS
      2、测试将img.onload换成getImageInfo,getImageInfo的返回值如下:


      将返回值用在ctx.drawImage中第一个参数,会报错,将返回值的path用在第一个参数上也会报错。不知道drawImage第一个参数如果放getImageInfo的值放哪个数据。
      3、已修改在exec中获取canvas对象
      03-31
      回复
    • 武曲心
      武曲心
      03-31回复星光刀锋
      改用exec中获取canvas对象正常了吗?不是单纯*dpr,我那只是举个例子,rpx和px之间转换不同设备不一样的,我的意思是尺寸不自适应,需要你手动去转换,改用getImageInfo去取图片的高宽,不要用createImage去取,反正我是认为createImage取到的值不可靠,有测试过碰到真机还不返回值。
      03-31
      回复
    • 武曲心
      武曲心
      03-31回复星光刀锋
      绘制图片自然还是用createImage的
      03-31
      回复
    • 武曲心
      武曲心
      03-31回复星光刀锋
      这是我之前写的图片填充容器,差别是偏移量我是用容器的高宽计算
      03-31
      回复
    • 星光刀锋
      星光刀锋
      03-31回复武曲心
      谢谢。其实在canvas中绘制的数据显示是正确的(说明createImage获取的宽高是正确的,可能会出现获取不到返回值,我修改一下,使用getImageInfo去获取),但在调用canvasToTempFilePath时获取到的图片数据不全。你那有没有调用canvasToTempFilePath这个API呢,有没有问题?你的canvas对象的宽高是初始化时设置好的吗?在加载图片时有没有修改canvas对象的宽和高呢?修改canvas对象的宽高(不是canvas组件),然后再调用canvasToTempFilePath函数,生成的临时图片地址显示有没有问题(在苹果手机上😂)?
      03-31
      回复
    查看更多(6)
登录 后发表内容
问题标签