小程序图片长按识别功能的实现方法


Posted in Javascript onAugust 30, 2018

背景

今天,做的小程序项目要求,个人中心的客服图片在用户长按时可以识别其二维码

在百度无果,参考小程序官方文档后,发现:

1.文档中有一句提示:

"image组件中二维码/小程序码图片不支持长按识别,仅在 wx.previewImage 中支持长按识别"

2.即便实现了 “wx.previewImage” 效果,但依旧是不支持二维码识别的

附录文档位置:小程序图片长按识别

代码设计

好在这也是一个不错的知识点,在此进行一番实现流程的记录,欢迎指摘.

①. wxml 页面元素设计

作为引导界面,只需放置一张图片即可,以我的代码为例

//# 使用简单的实现方式,直接赋值一个图片链接得了
<image src="https://img.fetow.com/Public/Index/images/shewm.jpg" mode="widthFix" 
 data-src="https://img.fetow.com/Public/Index/images/shewm.jpg" 
 bindtap="previewImage"></image>

②. js 文件实现 “previewImage”方法

在对应的 js 文件中,添加了如下的方法

/**
 * 图片预览方法
 * 此处注意的一点就是,调用 "wx.previewImage"时,第二个参数要求为数组形式哦
 * 当然,做过图片上传功能的应该会注意到,如果涉及到多张图片预览,图片链接数组集合即为参数 urls!
 */ 
 previewImage: function(e) {
 var current = e.target.dataset.src;
 wx.previewImage({
  current: current,
  urls: [current]
 })
 },

③. 实现效果

可以发现,下图中是没有“识别图中二维码”的选项

小程序图片长按识别功能的实现方法

如果发送给了好友或者自行保存后,在微信中打开的并长按的效果如下:

小程序图片长按识别功能的实现方法

出现问题:

1.服务器上发送过来的图片路径直接插进ctx.drawImage 上,手机上显示不了。

解决方案:利用wx.downloadFile 将图片下载再保存好这个新图片路径,然后放到ctx.drawImage 上

//下载图片
 onShow1: function (object) {
 let _this = this;
 _this.setData({
  isShowCav: true
 })
 wx.downloadFile({
  url: object.avatarurl,
  success: function (sres) {
  _this.setData({
   canvasUserPic: sres.tempFilePath
  });
  wx.downloadFile({
   url: object.show_img,
   success: function (sres1) {
   _this.setData({
    canvasShowImg: sres1.tempFilePath
   });
   _this.canvas(object);
   }
  })
  }
 })
 },

2.canvas出现在手机上的顶层,不管z-index设置多少层都没有用。

解决方案:利用wx:if="{{isShowCav}}" 将canvas临时隐藏,要用到的时候再显示。不用再隐藏掉。

3.canvas里面的文字如何居中,官方文档虽然提供了案例,但是没有说具体是怎么用的。

解决方案:

const ctx = wx.createCanvasContext('myCanvas')

ctx.setStrokeStyle('red')
ctx.moveTo(150, 20)
ctx.lineTo(150, 170)
ctx.stroke()

ctx.setFontSize(15)
ctx.setTextAlign('left')
ctx.fillText('textAlign=left', 150, 60)

ctx.setTextAlign('center')
ctx.fillText('textAlign=center', 150, 80)

ctx.setTextAlign('right')
ctx.fillText('textAlign=right', 150, 100)

ctx.draw()

小程序图片长按识别功能的实现方法

这里面的居中不是我们常用的css那种居中;而是忽略了文字宽高的意思,所以你还是要给文字设置一个(x,y)坐标,只要将这个坐标写上canvas宽度的一半,它就可以实现居中了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
jquery插件之easing使用
Aug 19 Javascript
AngularJS基础知识
Dec 21 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
详解Vue方法与事件
Mar 09 Javascript
es6 字符串String的扩展(实例讲解)
Aug 03 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
Dec 08 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
Sep 30 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
Dec 24 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
浅谈小程序globalData的那些事儿
Nov 01 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 #Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 #Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 #Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 #Javascript
在Vue methods中调用filters里的过滤器实例
Aug 30 #Javascript
vue 根据数组中某一项的值进行排序的方法
Aug 30 #Javascript
对vue中methods互相调用的方法详解
Aug 30 #Javascript
You might like
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
基于zTree树形菜单的使用实例
2017/12/25 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
利用python批量检查网站的可用性
2016/09/09 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
英智兴达软件测试笔试题
2016/10/12 面试题
绿色城市实施方案
2014/03/19 职场文书
团代会主持词
2014/04/02 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
干部外出学习心得体会
2016/01/18 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
Redis可视化客户端小结
2021/06/10 Redis
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏