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


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 XML和string相互转化实现代码
Jul 04 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
jQuery实现的简单提示信息插件
Dec 08 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
详解vue.js组件化开发实践
Dec 14 Javascript
jquery表单验证实例仿Toast提示效果
Mar 03 Javascript
面包屑导航详解
Dec 07 Javascript
JS中promise化微信小程序api
Apr 12 Javascript
详解node.js的http模块实例演示
Jul 12 Javascript
jquery实现吸顶导航效果
Jan 08 jQuery
vue路由实现登录拦截
Mar 24 Vue.js
React + Threejs + Swiper 实现全景图效果的完整代码
Jun 28 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 chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
Javascript 布尔型分析
2008/12/22 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python中的异常处理学习笔记
2015/01/28 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Flask之flask-script模块使用
2018/07/26 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
企业负责人任命书
2014/06/05 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
县委务虚会发言材料
2014/10/20 职场文书
民间借贷被告代理词
2015/05/23 职场文书
天堂的孩子观后感
2015/06/11 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android