博客
关于我
canvas组件绘制的内容导出生成图片保存到相册后打开异常
阅读量:458 次
发布时间:2019-03-06

本文共 2353 字,大约阅读时间需要 7 分钟。

转:

问题现象:

  canvas组件绘制的内容导出生成图片保存到相册,进入相册,打开该图片看不到绘制的内容,只有黑色的背景图。

下图中绿色背景部分是canvas组件绘制的内容。

保存到相册效果图如下:

问题分析:

  华为的快应用引擎会在每次调用getContext方法创建ctx,会返回不同的ctx对象,有的里面会有内容,有的里面会为空,获取的时候是随机获取的,可能会获取到空的ctx,导致保存后的图片没有内容,问题代码如下。

canvas绘制代码

pic() {      var test = this.$element("canvas");      var ctx = test.getContext("2d");      var img = new Image();      img.src = "http://www.huawei.com/Assets/CBG/img/logo.png";      img.onload = function () {        console.log("图片加载完成");        ctx.drawImage(img, 10, 10, 300, 300, );      }      img.onerror = function () {        console.log("图片加载shibai");      }    },

保存图片代码

save() {      var test = this.$element("canvas");      test.toTempFilePath({        fileType: "jpg",        quality: 1.0,        success: (data) => {          console.log(`Canvas toTempFilePath success ${data.uri}`)          console.log(`Canvas toTempFilePath success ${data.tempFilePath}`)          media.saveToPhotosAlbum({            uri: data.uri,            success: function (ret) {              console.log("save success: ");            },            fail: function (data, code) {              console.log("handling fail, code=" + code);            }          })        },        fail: (data) => {          console.log('Canvas toTempFilePath data =' + data);        },        complete: () => {          console.log('Canvas toTempFilePath complete.');        }      })    }

解决方法

把ctx定义为全局变量,对ctx进行非空判断,为空时,初始化保存。

优化代码如下

var ctx; //定义一个全局的    pic() {      if (!ctx) { //对空对象进行判断,ctx为空的时候,把“2d”赋给它        var test = this.$element("canvas");        var tt = test.getContext("2d");        ctx = tt;      }      var img = new Image();      img.src = "http://www.huawei.com/Assets/CBG/img/logo.png";      img.onload = function () {        console.log("图片加载完成");        ctx.drawImage(img, 10, 10, 300, 300, );      }      img.onerror = function () {        console.log("图片加载shibai");      }    }

欲了解更多详情,请参见:

快应用开发指导文档:https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-whitepaper

快应用canvas组件:

https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-component-canvas

画布接口:

https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-api-canvas


原文链接: https://developer.huawei.com/consumer/cn/forum/topic/0201404980467060234?fid=18

作者:AppGallery Connect

转:

转载地址:http://qozbz.baihongyu.com/

你可能感兴趣的文章
Mysql 常见错误
查看>>
mysql 常见问题
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>