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


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 相关文章推荐
JS面向对象、prototype、call()、apply()
May 14 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
Jun 11 Javascript
jQuery使用数组编写图片无缝向左滚动
Dec 11 Javascript
纯js简单日历实现代码
Oct 05 Javascript
javascript实现网页背景烟花效果的方法
Aug 06 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
原生js轮播特效
May 18 Javascript
JavaScript你不知道的一些数组方法
Aug 18 Javascript
微信小程序使用request网络请求操作实例
Dec 15 Javascript
详解使用VueJS开发项目中的兼容问题
Aug 02 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
Node.js 的 GC 机制详解
Jun 03 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
一个分页的论坛
2006/10/09 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
10个简化PHP开发的工具
2014/12/25 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
Python科学计算之Pandas详解
2017/01/15 Python
python的多重继承的理解
2017/08/06 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
护士的自我鉴定
2014/02/07 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
初中班主任评语
2014/04/24 职场文书
文明城市创建标语
2014/06/16 职场文书
宣传普通话标语
2014/06/27 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
运动会广播稿50字
2015/08/19 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
Python天气语音播报小助手
2021/09/25 Python