H5+App点击图片保存到相册

业务场景:webapp点击图片保存到相册

使用的h5api:

思路:点击保存到相册要调用保存到相册的save方法,第一个参数为手机的本地文件路径,这里就有一个问题我们需要将当前页面的文件先存入手机的系统文件中,经过api寻找发现nativeObj中的Bitmap是可以通过loadBase64Data()base64转换成原生图片对象,之后使用bitmap.save可以将原生图片对象放入系统文件并且通过成功回调获得文件的地址,之后再调用gallerysave()保存即可。

imageDown

入口函数(转化的图片base64,成功回调,失败回调)

const imageDown = function (base64, success, error) {
  var bitmap = new window.plus.nativeObj.Bitmap('image')
  bitmap.loadBase64Data(base64, function (i) {
    bigmapToSave(bitmap, success, error)
  }, function (err) {
    window.plus.nativeUI(err.message)
  })
}

export default imageDown

bigmapTosave

调用保存Bitmap的图片到本机系统文件,为之后相册保存提供路径

const bigmapToSave = function (bitmap, success, error) {
  var name = randomString(10)
  bitmap.save(`_doc/${name}.jpg`, { overwrite: false }, function (event) {
    console.log(event.target)
    imageSaveByGallery(event.target, success, error)
  }, function (err) {
    window.plus.nativeUI(err.message)
  })
}

注意:这里使用随机一个字符串作为存储的安卓路径名,是因为如果写死同个路径,不同的base64图片对象会覆盖原有的路径,不同机型还没测试,bitmap.save()saveOptionoverwrite在我测试机上无效。故使用过这个方法

imageSaveByGallery

保存到相册,保存成功调用外部的成功的回调,失败调用失败的回调

const imageSaveByGallery = function (url, success, error) {
  window.plus.gallery.save(url, function (event) {
    const tarbitmap = window.plus.nativeObj.Bitmap.getBitmapById('image')
    tarbitmap.clear()
    success()
  }, function (err) {
    window.plus.nativeUI(err.message)
    error()
  })
}

注意:当保存成功之后要记得使用bitmap.clear()清楚内存,因为原生图像的内存占用较大,文档中有所提示

randomString

随机一个字符串

const randomString = function randomString (e) {
  e = e || 32
  var t = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  var a = t.length
  var n = ''
  for (var i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a))
  return n
}
上一篇 vue-cli项目设置favicon以及动态修改favicon
下一篇 微信H5页面 ios12 软键盘收回时页面不回弹,导致光标位置错乱,再次点击输入框区域时无法focus
目录
文章列表
1 jQuery获得select/option的值和对select/option进行操作
jQuery获得select/option的值和对select/option进行操作
2
CentOS下安装Confluence 7.1.0
CentOS下安装Confluence 7.1.0
3
React Native学习之安装Nuclide与AlertIOS API
React Native学习之安装Nuclide与AlertIOS API
4
SpringBoot+Druid+MyBatis配置多数据源
SpringBoot+Druid+MyBatis配置多数据源
5
Android自定义支持多层嵌套RadioButton的RadioGroup
Android自定义支持多层嵌套RadioButton的RadioGroup
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。