当想要分享小程序的介绍卡片时,往往会需要将图片保存下来并分享。

但是,在开发时,二维码的图片是不固定的,往往需要将两张甚至两张以上的图片拼接到一起进行保存。如下图,就是由背景图和二维码拼接到一起的图片效果:

当通过设置show-menu-by-longpress来保存图片时:

<image show-menu-by-longpress @longtap="chkit" src="https://img0.baidu.com/it/u=2108274043,4161636619&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=360">

仅仅会将背景图保存下来,上层的二维码覆盖物无法保存成功。

因此主要的解决方案就是将两张图片合二为一,我首先想到的就是利用canvas将两张图片绘制到一起。

流程:

1.首先先在页面上定义一个canvas标签,用于绘制拼接后的图片。需指定一个canvas-id,后期会用它来生成临时的图片路径,以便图片保存。

<canvas class='canvas-poster' canvas-id='myCanvas'></canvas>

2.定义方法来绘制两者图片到一起(两张图片使用临时的代替了):

//绘制图像
function viewDrawToCanvas() {//通过uni.downloadFile对绘制方法进行包裹,加载成功后才开始绘制uni.downloadFile({url: "https://img0.baidu.com/it/u=2108274043,4161636619&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=360",success(res) {//获取到目标Canvas对象const ctx = wx.createCanvasContext('myCanvas')ctx.drawImage(res.tempFilePath, 0, 0, uni.upx2px(900), uni.upx2px(456))//使用同样的方法绘制第二张uni.downloadFile({url: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fupload-images.jianshu.io%2Fupload_images%2F20446980-56f681094c41bfe6.jpeg&refer=http%3A%2F%2Fupload-images.jianshu.io&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1664431859&t=8fa0744e59d6d892c4edc6037aa38e6b",success(res) {ctx.drawImage(res.tempFilePath, 0, 0, uni.upx2px(300), uni.upx2px(150))imgurl.value = res.tempFilePath//这个一定要写ctx.draw(true)}})ctx.draw()}})
}

3.在生命周期中调用第2部声明的绘制方法,确保图片绘制成功。

//这里笔者使用的vue3钩子函数,仅供参考
onMounted(() => {viewDrawToCanvas()
})

这样拼接后的图片就显示在页面上了,接下来就是图片的长按保存了。

4.使用标签包裹第1步的canvas标签,并使用longtap(长按交互)绑定事件

<view @longtap="chkit" style="display: inline-block;"><canvas class='canvas-poster' canvas-id='myCanvas'></canvas>
</view>

5.在触发的事件中通过wx.canvasToTempFilePath传入canvas-id获取临时的图片路径,并使用uni.saveImageToPhotosAlbum保存图片。

function chkit() {wx.canvasToTempFilePath({//传入canvas标签上定义的canvas-id,解析图片内容,供后续使用canvasId: 'myCanvas',success: function(res) {uni.saveImageToPhotosAlbum({//传入解析后的图片数据,并在用户同意授权后将其保存到相册中filePath: res.tempFilePath,success: () => {uni.showToast({title: '保存成功',duration: 2000});},fail: () => {uni.showToast({title: '保存失败',duration: 2000,icon: "none"});}});}})
}

然后便可以实现长按图片下载拼接后的图片的效果了。

希望本文会对您有所帮助^_^

uniapp实现附有二维码的图片的本地保存相关推荐

  1. uniapp 画布绘制二维码,图片,文字的方法

    uniapp 画布绘制二维码 创建canvas标签 canvas属性 获取canvas上下文 开始绘制 画图片 本地图片 网络图片 渐变色画背景图 创建一个渐变色线性对象 画文字 画二维码 坑点 最近 ...

  2. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...

  3. 小猿圈web前端简述canvas如何实现二维码和图片合成

    你经常看到活动海报什么的,上都是有各种宣传文案以及二维码形成的,你知道怎么用canvas实现二维码和图片合成,下面小猿圈Linux讲师为你详细介绍一下canvas如何实现二维码和图片合成的. 使用ur ...

  4. Vue.js结合Canvas制作二维码和图片的合成(qrcanvas + html2canvas)

    (这个有问题,最近会把整理后的更新上去!!!!!!) 最新最新!!!:https://blog.csdn.net/zuorishu/article/details/88632978 需求背景: 分享图 ...

  5. 利用canvas把二维码和图片合成海报

    思路:在微信中登录,后台传来的是一个链接.一个名字.一张图片.把图片当做背景,画满整个画布.之后需要把链接转为二维码,使用jq.qrcode转化,转化完成后是一个canvas,把这个canvas再转成 ...

  6. 对#Hello,2015征文#+Android 热敏打印机打印二维码(图片)博客的尝试

    原博客链接 #Hello,2015征文#+Android 热敏打印机打印二维码 昨天晚上说抽时间来写一篇关于Android 热敏打印机打印二维码和图片的文章,所幸在下班之前把它给写了,和大家分享吧.我 ...

  7. 简单的二维码生成接口,自动生成二维码,返回图片地址

    自动生成二维码,返回图片地址 本来不想写的,但是怕太久不写这个东西,就要荒废了,就先记录一下简单的东西 这里因为,返回地址的时候,通过了nginx ,我试了很多方法都抓取不到对应的IP地址, 就在ng ...

  8. myqr一句代码实现二维码背景图片自定义装逼指南

    myqr一句代码实现二维码背景图片自定义装逼指南 文章目录 myqr一句代码实现二维码背景图片自定义装逼指南 前提准备 步骤 注意 拓展 示例 前提准备 1.Python安装(下载安装教程自行查阅). ...

  9. Vue.js结合Canvas制作二维码和图片的合成(html2canvas + Canvas2Image)--整理

    之前写过一篇关于二维码和图片合成的博文,但是存在一些问题,本篇是本人整理最后在项目中使用的. 建议:如果是单张背景图或者是多张背景图且二维码在同一位置的话,建议直接在后台合成分享图直接给前端返回即可, ...

最新文章

  1. 谈谈离职和跳槽(copy)
  2. 月球计划—ESP8266接入小爱同学控制彩灯
  3. Exchange 常见问题之二----3
  4. php转译html,使用php转义输出HTML到JavaScript
  5. POJ2481-Cows【树状数组】
  6. Matlab看跌期权二叉树,欧式期权二叉树MATLAB程序
  7. 使用touch更新文件的时间
  8. Community Server专题八:MemberRole之Membership深入篇 [转]
  9. w3c标准的网页内嵌播放器代码
  10. 地震与地球的内部构成
  11. centos 7 查看、更新系统版本
  12. 具体数学-第3课(递归式转化为求和求解)
  13. mongo-java-driver 的简单使用(1)
  14. 麒麟ARM版:不能使用U盘安装,只能使用光盘
  15. 基于spss的偏相关分析(partial correlation analysis)
  16. 计算机主要应用是什么意思,admin是什么意思 Admin的用途介绍
  17. 安大计算机学院ACM,全员考研上岸、ACM大赛获奖,乘风破浪的学霸寝室!
  18. Mount is denied because the NTFS volume is already exclusively opened.The volume may be already ...
  19. Kafka:分布式消息系统
  20. 央视揭秘“微商传销”:通过朋友圈炫富发展下线

热门文章

  1. 【技术美术】千人千面如何炼成 技术讲解捏脸系统设计原理
  2. 如何在线进行PDF文档解密操作
  3. CentOS 7安装图形化界面
  4. python设备分组(部门分组等)功能设计
  5. 2017 云+未来峰会——上海站开发者专场即将开讲(30元电话充值卡等你拿)
  6. 无人机这个创业方向靠谱吗?值得投资吗?
  7. VMware新建OracleLinux6.5虚拟机
  8. 李建忠设计模式之“单一职责”模式
  9. ZDNS受邀出席腾讯云基础资源年会,分享《2020域名行业发展报告》
  10. vmware之设置共享文件夹