评论

实现保存图片功能的3种方式

微信小程序保存图片的3种方式

前言

图片保存是业务中非常常见的需求,本文带你解锁三种不一样的图片保存方式:

  • 点击图片预览保存
  • 点击按钮保存
  • 长按图片保存

点击图片预览保存

点击图片预览保存先通过wx.previewImage接口预览图片,然后长按图片弹出底部弹窗保存图片。这种方式的缺点是会多一个预览的步骤

详细实现代码如下:

wx.previewImage({
  current: '', // 当前显示图片的http链接
  urls: ['https://www.xxx.png', ...] // 需要预览的图片http链接列表
})
  • 如果只想显示一张,那urls数组值只写一个即可,但urls的类型必须是数组
  • current默认第一张,如果你有多张图片,可以选择其中一张作为优先预览显示的图片

实现效果如下:

点击按钮保存图片

微信官方并当前没有直接提供api实现保存图片到相册的功能,其实现的思路是利用canvas画布有提供api可保存到相册,将图片通过画布相关接口绘制成画布,再通过其api保存到相册即可。

详细的实现步骤如下

  1. 首先准备一个画布和按钮
<canvas  canvas-id="myQrcode" style="width: 100%; height: 180px;" />
<button  bindtap="onSave" data-value="myQrcode" style="margin-top: 100rpx">保存图片</button>
  1. 在合适的时机绘制画布(请求到图片后、生命周期等)
const ctx = wx.createCanvasContext('myQrcode')
wx.getImageInfo({
   src: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2369241864,430646211&fm=26&gp=0.jpg', // 图片地址
   success: (res) => {
     console.log(res)
     ctx.drawImage(res.path, 0, 0, 375, 180)
     ctx.draw()
   }
})
  1. 点击按钮实现保存逻辑
onSave(res) {
 const { value } = res.currentTarget.dataset
 wx.canvasToTempFilePath({
   canvasId: value,
   success: (res) => {
     const tempFilePath = res.tempFilePath;
     //保存二维码
     wx.getSetting({
       success: (res) => {
         console.log(res)
         const status = res.authSetting['scope.writePhotosAlbum']
         if (!status) {
           // 引导用户授权...
         } else {
           // 保存图片到系统相册
           this.saveImg(tempFilePath)
         }
       }
     })
   },
   fail: function(err) {
     console.log(err);
   }
 });
},
/* 保存图片 */
saveImg(tempFilePath) {
  wx.saveImageToPhotosAlbum({
    filePath: tempFilePath,
    success: function (res) {
      wx.showToast({
        title: '保存图片成功',
      })
    },
    fail: function (err) {
      wx.showToast({
        title: '保存图片失败' ,
      })
    }
  })
}

实现效果如下:

  • 如果在组件中使用这种方式,画布相关的api第二个参数需要传入组件的this。
  • wx.saveImageToPhotosAlbum接口不支持网络路径。
  • wx.getImageInfo接口对于网络图片需先配置download域名才能生效。

长按图片保存

虽然官方也没有提供图片长按保存的功能,但是根据上节内容的实现方法配合wx.showActionSheet接口即可实现长按图片保存的功能

具体的实现步奏如下:

  1. 准备画布,监听长按操作
<canvas canvas-id="myQrcode"  style="width: 100%; height: 180px" data-value="myQrcode" bindlongpress="showActionSheet"/>

2.长按图片弹出操作菜单

showActionSheet(res) {
  wx.showActionSheet({
    itemList: ['保存图片'],
    success: (e) => {
      if(e.tapIndex === 0) {
        this.onSave(res)
      }
    },
    fail (e) {
      console.log(e.errMsg)
    }
  })
},

3.实现保存图片相关逻辑,拷贝上节的onSave及相关方法即可,思路都是一样的。

实现效果如下:


  • 这三种方式保存图片的路径都是相同的。
最后一次编辑于  2021-04-13  
点赞 4
收藏
分享 评论
请 登录 后发表内容

PHP网站源码大浪设计网站南澳网络广告推广南联网站制作设计民治网站优化软件宝安外贸网站制作同乐百搜标王坂田网络推广松岗推广网站横岗网站推广工具惠州网页制作西乡网站搜索优化福永网络广告推广广州至尊标王塘坑百度seo爱联外贸网站设计松岗关键词排名包年推广大芬网站推广系统民治网站设计永湖网站设计松岗模板推广光明营销网站西乡网站优化按天计费南山网站定制东莞至尊标王南山百度网站优化东莞网站设计模板大浪SEO按效果付费南澳网站seo优化坑梓高端网站设计平湖外贸网站设计歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化