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


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 相关文章推荐
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
倒记时60刷新网页的js代码
Feb 18 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
Apr 29 Javascript
JS防止网页被嵌入iframe框架的方法分析
Sep 13 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
js如何编写简单的ajax方法库
Aug 02 Javascript
ztree实现左边动态生成树右边为内容详情功能
Nov 03 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
Aug 09 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
解决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中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
php上传excel表格并获取数据
2017/04/27 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
详解Python的单元测试
2015/04/28 Python
python 调用HBase的简单实例
2016/12/18 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
python绘制彩虹图
2019/12/16 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
keras 多任务多loss实例
2020/06/22 Python
python代码实现猜拳小游戏
2020/11/30 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
实习单位鉴定评语
2014/04/26 职场文书
研究生个人学年总结
2015/02/14 职场文书
婚庆答谢词大全
2015/09/29 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书