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


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 QueryString解析类代码
Jan 17 Javascript
JS获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
Mar 15 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
javascript瀑布流式图片懒加载实例解析与优化
Feb 23 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
Sep 04 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
js实现3D照片墙效果
Oct 28 Javascript
vue vant Area组件使用详解
Dec 09 Javascript
Js跳出两级循环方法代码实例
Sep 22 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
如何给phpadmin一个保护
2006/10/09 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
常见python正则用法的简单实例
2016/06/21 Python
用python做游戏的细节详解
2019/06/25 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
用Python写一个自动木马程序
2019/09/17 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
移动通信行业实习自我鉴定
2013/09/28 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
先进单位事迹材料
2014/12/25 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
英文慰问信
2015/02/14 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript