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


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中将URL中的参数提取出来作为对象的实现代码
Aug 16 Javascript
用js动态添加html元素,以及属性的简单实例
Jul 19 Javascript
深入浅出 jQuery中的事件机制
Aug 23 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
BootStrap实现带关闭按钮功能
Feb 15 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 Javascript
Antd的table组件表格的序号自增操作
Oct 27 Javascript
WebStorm中如何将自己的代码上传到github示例详解
Oct 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Python Subprocess模块原理及实例
2019/08/26 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
编程输出如下图形
2013/11/24 面试题
中学教师自我鉴定
2014/02/07 职场文书
医学生求职自荐书
2014/06/12 职场文书
新闻编辑求职信
2014/07/13 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
具结保证书范本
2015/05/11 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
Java无向树分析 实现最小高度树
2022/04/09 Javascript
MySQL索引失效场景及解决方案
2022/07/23 MySQL