vue 公众号扫描_vue编写微信公众号打开相机功能

vue编写微信公众号打开相机功能,什么都不多说直接上代码

页面布局代码

class="previewer-demo-img"

:key="index"

:src="item.src"

width="100"

@click="previewImg(index)"

>

1.微信config初始化前端代码

initWxConfig() {

let $this = this;

let url = location.href.split("#")[0];

let dataW = qs.stringify({ url: url });

axios

.post(baseURL + "/wx/getWxJSConfig", dataW)

.then(res => {

if (res.status == "200") {

wx.config({

debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: res.data.appId, // 必填,公众号的唯一标识

timestamp: res.data.timestamp, // 必填,生成签名的时间戳

nonceStr: res.data.nonceStr, // 必填,生成签名的随机串

signature: res.data.signature, // 必填,签名,见附录1

jsApiList: [

"checkJsApi",

"onMenuShareTimeline",

"onMenuShareAppMessage",

"onMenuShareQQ",

"onMenuShareWeibo",

"onMenuShareQZone",

"hideMenuItems",

"showMenuItems",

"hideAllNonBaseMenuItem",

"showAllNonBaseMenuItem",

"translateVoice",

"startRecord",

"stopRecord",

"onVoiceRecordEnd",

"playVoice",

"onVoicePlayEnd",

"pauseVoice",

"stopVoice",

"uploadVoice",

"downloadVoice",

"chooseImage",

"previewImage",

"uploadImage",

"downloadImage",

"getNetworkType",

"openLocation",

"getLocation",

"hideOptionMenu",

"showOptionMenu",

"closeWindow",

"scanQRCode",

"chooseWXPay",

"openProductSpecificView",

"addCard",

"chooseCard",

"openCard"

] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

}

});

},

后端验证代码

/**

* 微信js api验证--找电工页面

*

* @param request

* @param response

* @return

* @throws DataAccessException

* @throws Exception

*/

@RequestMapping("wx/getWxJSConfig")

@ResponseBody

public Map getWxJSConf(HttpServletRequest request, HttpServletResponse response) {

String PageUrl = request.getParameter("url");

Map result = new HashMap();

result.put("appId", ConfigUtil.APPID);

String access_token = "";

if(access_token == null || access_token=="" || "null".equals(access_token)){

String url="https://api.weixin.qq.com/cgi-bin/token";

String param="grant_type=client_credential&appid="+ConfigUtil.APPID+"&secret="+ConfigUtil.APP_SECRECT;

String token=WeixinUtil.httpGet(url, param);

JSONObject j=new JSONObject(token);

access_token=(String) j.get("access_token");

request.getServletContext().setAttribute("access_token", access_token);

}

String url_ticket="https://api.weixin.qq.com/cgi-bin/ticket/getticket";

String param="access_token="+access_token+"&type=jsapi";

String ticket=WeixinUtil.httpGet(url_ticket, param);

JSONObject j=new JSONObject(ticket);

String jsapi_ticket=(String) j.get("ticket");

request.getServletContext().setAttribute("jsapi_ticket", jsapi_ticket);

long timestamp = new Date().getTime();

String nonceStr = WeixinUtil.getRandomString(16);

//String PageUrl = "http://whemap.3w.net579.com/jzfp_m/wx/test";

StringBuilder sb = new StringBuilder();

sb.append("jsapi_ticket=" + jsapi_ticket);

sb.append("&noncestr=" + nonceStr);

sb.append("&timestamp=" + timestamp);

sb.append("&url=" + PageUrl);

String signature = new SHA1().getDigestOfString(sb.toString().getBytes());

result.put("timestamp", timestamp);

result.put("nonceStr", nonceStr);

result.put("signature", signature);

return result;

}

2.开启摄像头

//图片上传

imgup() {

let $this = this;

wx.chooseImage({

count: 9, // 最多可以选择的图片张数,默认9

sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有

sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有

success: function(res) {

$this.images.localId = res.localIds;

let obj={};

obj.src=res.localIds;

$this.ioslocId.push(obj);

$this.scrollFn();

$this.uploadImge();

if ($this.ioslocId.length >= 9) {

$this.imgBoolean = false;

}

}

});

},

3.图片预览功能

//图片展示

ylimg() {

let $this = this;

// for (let j = 0; j < $this.images.localId.length; j++) {

wx.getLocalImgData({

//循环调用 getLocalImgData

localId: $this.images.localId[j], // 图片的localID

success: function(res) {

var localData = res.localData; // localData是图片的base64数据,可以用img标签显示

if (window.__wxjs_is_wkwebview) {

//ios

localData = localData.replace("jgp", "jpeg"); //iOS 系统里面得到的数据,类型为 image/jgp,因此需要替换一下

} else {

localData = "data:image/jpeg;base64," + localData; //android

}

$this.ioslocId.push(localData); //把base64格式的图片添加到ioslocId数组里 这样该数组里的元素都是base64格式的

this.scrollFn();

}

});

// }

},

//图片预览

previewImg(index){

this.$refs.previewer.show(index);

},

上面的代码写出了微信公众号里面调取摄像头所有步骤的实现代码。微信公众号第一步要实现获取到公众号的唯一标志。开启摄像头调取的是微信自带的wx.chooseImage方法。可以实现读取到本地摄像头,图片展示功能就是调取微信自带的 wx.getLocalImgData方法,这里要注意到两个系统的区别,要转换成base64位的。以上就是全部微信公众号获取相机功能拍照以及预览。

原文作者技术博客:https://www.jianshu.com/u/ac4daaeecdfe

95后前端妹子一枚,爱阅读,爱交友,将工作中遇到的问题记录在这里,希望给每一个看到的你能带来一点帮助。

欢迎留言交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能&#xff0c;简短的内容&#xff0c;深入的理解&#xff0c;Always to review the basics。 NOT IN、NOT EXISTS、LEFT JOIN...IS NULL性能分析 我们首先创建测试表 USE TSQL2012 GOCREATE SCHEMA [c…

global using 的另类用法

前言global using 指令在 C# 10 中被引入&#xff0c;意味着 using 将应用于编译中的所有文件&#xff08;通常是一个项目&#xff09;。比如&#xff1a;global using System.Text;则在同一项目的其他位置&#xff0c;可以直接使用 System.Text 下的所有类型而无需再次声明 us…

利用 Node.js 实现 SAP Hana 数据库编程接口

为什么80%的码农都做不了架构师&#xff1f;>>> 自 SAP HANA SP 11 之后&#xff0c;可以使用 Node.js 作为 Hana 的编程接口。SAP 将 Application server 简称为 XS。现在 XS 已经演化为 Advanced 版本。为了区别&#xff0c;早期的 XS 被称为 XS Classical。 从下…

WPF 实现自绘验证码

WPF 实现自绘验证码控件名&#xff1a;VerifyCode作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;如何通过DrawingV…

css中的单位换算_CSS单位px、em、rem及它们之间的换算关系

作者:WangMin格言:努力做好自己喜欢的每一件事国内的设计师大都喜欢用px&#xff0c;而国外的网站大都喜欢用em和rem&#xff0c;那么三者的区别与优势是什么&#xff1f;接下来我们就来学习一下吧&#xff01;单位px、em、rem分别表示什么&#xff1f;1、 px(Pixel) 相对于显示…

【MAC】Ncnn 编译so文件方案

【MAC】Ncnn 编译so文件方案 1、下载ncnn github地址是&#xff1a;https://github.com/Tencent/ncnn 指定目录&#xff1a;在终端或者git管理工具 输入&#xff1a;git clone https://github.com/Tencent/ncnn.git 2、编译Ncnn 2.1 Mac平台 安装cmake、wget&#xff08;根据实…

SSM学习注意杂记

2019独角兽企业重金招聘Python工程师标准>>> 1.spring导包时一定要版本对应&#xff0c;最好不要导不同版本的包&#xff0c;还有mybatis的包&#xff0c;springmvc的包&#xff0c;三个框架的包都需配套&#xff0c;要不然会出现一些想象不到的错误。 2.mybatis写映…

《ASP.NET Core 6框架揭秘》实例演示[15]:针对控制台的日志输出

针对控制台的ILogger实现类型为ConsoleLogger&#xff0c;对应的ILoggerProvider实现类型为ConsoleLoggerProvider&#xff0c;这两个类型都定义在 NuGet包“Microsoft.Extensions.Logging.Console”中。ConsoleLogger要将一条日志输出到控制台上&#xff0c;首选要解决的是格式…

《HeadFirst Python》第一章学习笔记

对于Python初学者来说&#xff0c;舍得强烈推荐从《HeadFirst Python》开始读起&#xff0c;这本书当真做到了深入浅出&#xff0c;HeadFirst系列&#xff0c;本身亦是品质的保证。这本书舍得已在《Python起步&#xff1a;写给零编程基础的童鞋》一文中提供了下载。为了方便大家…

Oracle-13:Oracle中的表分区

------------吾亦无他,唯手熟尔&#xff0c;谦卑若愚&#xff0c;好学若饥------------- 本篇博客记录了表分区 表分区的含义&#xff1a; 典型的拿空间换时间的案例&#xff01; 表分区对一张表进行分区&#xff0c;分区之后表中的数据存在相对应的分区内&#xff08;可以是不…

js控制图像等比例缩放

<!DOCTYPE html> <html> <head><title>图片内部放大效果</title> <meta charset"utf-8"> <style type"text/css">#imgborder{ width: 200px;height: 160px;border: 3px solid #000; overflow: hidden;position:…

mysql一张表最多多少索引_MySQL一个索引最多有多少个列?真实的测试例子

MySQL一个索引最多有多少个列&#xff1f;真实的测试例子更新时间&#xff1a;2009年07月01日 22:22:21 作者&#xff1a;MySQL一个索引最多有多少个列&#xff1f;下面是具体的实现代码。最多16列。create table test (f1 int,f2 int,f3 int,f4 int,f5 int,f6 int,f7 int,f8…

.NET Core 使用 LibreOffice 实现 Office 预览(Docker 部署)

前些年做云盘产品的时候&#xff0c;一个很核心的功能就是 Office 文件预览&#xff0c;当时还没有使用 .NET Core ,程序部署在 Windows Server 服务器上&#xff0c;文件预览的方案采用了微软的 OWA 。目前在做的零代码产品中的表单附件控件&#xff0c;同样面临着 Office 文件…

[开源精品] C#.NET im 聊天通讯架构设计 -- FreeIM 支持集群、职责分明、高性能

&#x1f4bb; FreeIM 是什么&#xff1f;FreeIM 使用 websocket 协议实现简易、高性能&#xff08;单机支持5万连接&#xff09;、集群即时通讯组件&#xff0c;支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。 ImCore 已正式改名为 FreeIM。使用场景&#xff…

用websploit获取管理员后台地址

1, use web/dir_scanner 2, set TARGET http://www.****.com 3, run SOURCE: https://sourceforge.net/projects/websploit/ WebSploit Advanced MITM Framework[]Autopwn – Used From Metasploit For Scan and Exploit Target Service[]wmap – Scan,Crawler Target Used Fro…

《ASP.NET Core 6框架揭秘》实例演示[16]:内存缓存与分布式缓存的使用

.NET提供了两个独立的缓存框架&#xff0c;一个是针对本地内存的缓存&#xff0c;另一个是针对分布式存储的缓存。前者可以在不经过序列化的情况下直接将对象存储在应用程序进程的内存中&#xff0c;后者则需要将对象序列化成字节数组并存储到一个独立的“中心数据库”。对于分…

人工智能教程007:创建一个卷积神经网络(2)

2019独角兽企业重金招聘Python工程师标准>>> 我们如何对图像应用卷积 当我们在图像上应用卷积时&#xff0c;我们在两个维度上执行卷积——水平和竖直方向。我们混合两桶信息&#xff1a;第一桶是输入的图像&#xff0c;由三个矩阵构成——RGB三通道&#xff0c;其中…

【系统知识点】linux入门基础命令

大概总结了一下一些基础命令&#xff0c;仅仅是帮助基础使用linux文件系统&#xff0c;如果还有相关基础命令&#xff0c;希望大家留言一起补充汇总一下&#xff01;命令的基本格式&#xff1a;格式&#xff1a;command [-options] parameter1 parameter2 …ps&#xff1a;第一…

Blazor University (48)依赖注入 —— Scoped 依赖

原文链接&#xff1a;https://blazor-university.com/dependency-injection/dependency-lifetimes-and-scopes/scoped-dependencies/Scoped 依赖Scoped 依赖项类似于 Singleton 依赖项&#xff0c;因为 Blazor 会将相同的实例注入到依赖它的每个对象中&#xff0c;但不同之处在…

c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查

这里复制的http://www.bitscn.com/pdb/mysql/201407/226252.html一、环境配置1&#xff0c;装好mysql&#xff0c;新建一个C控制台工程(从最简单的弄起&#xff0c;这个会了&#xff0c;可以往任何c工程移植)&#xff0c;在vs2010中设置&#xff0c;工程--属性--VC目录--包含目…