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


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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
js玩一玩WSH吧
Feb 23 Javascript
js word表格动态添加代码
Jun 07 Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
Aug 10 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
Vue封装一个简单轻量的上传文件组件的示例
Mar 21 Javascript
vue 实现数字滚动增加效果的实例代码
Jul 06 Javascript
Vue+TypeScript中处理computed方式
Apr 02 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
关于js和php对url编码的处理方法
2014/03/04 PHP
php实现的CSS更新类实例
2014/09/22 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python批量更改文件名的实现方法
2017/10/29 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
python让函数不返回结果的方法
2020/06/22 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
历史学专业推荐信
2013/11/06 职场文书
安全技术说明书
2014/05/09 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
公司口号大全
2014/06/11 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
法定代表人身份证明书
2014/09/10 职场文书
项目备案申请报告
2015/05/15 职场文书
体育部部长竞选稿
2015/11/21 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript