本文实例为大家分享了微信小程序调用摄像头实现拍照的具体代码,供大家参考,具体内容如下
微信小程序开发文档
首先,需要用户授权摄像头权限,这一步是必须的
具体步骤:
1、获取用户当前授权状态,看是否已经授权,如果已经授权直接显示摄像头
2、如果用户还没有授权,则调起授权弹框,用户允许授权则显示摄像头
3、如果用户不允许,则提示用户去设置页面打开摄像头权限
用户授权之后,就可以进行拍摄了,微信的camera组件无法显示为圆形,我这里是用一张图片遮盖了
上代码:
wxml:
- <view class='camera'>
- ? <image src="/images/border.png" mode="widthFix"></image>
- ? <camera wx:if="{{isAuth}}" device-position="back" flash="off" binderror="error"></camera>
- </view>
- <button class="takePhoto" type="primary" bindtap="takePhoto">拍照</button>
wxss:
- .camera {
- ? width: 430rpx;
- ? height: 430rpx;
- ? border-radius: 50%;
- ? margin: 20px auto 0;
- ? position: relative;
- }
-
- .camera image {
- ? position: absolute;
- ? width: 100%;
- ? height: 100%;
- ? z-index: 10;
- }
-
- .camera camera {
- ? width: 428rpx;
- ? height: 428rpx;
- }
-
- button.takePhoto:not([size='mini']) {
- ? position: fixed;
- ? bottom: 0;
- ? left: 0;
- ? width: 100vw;
- ? height: 90rpx;
- ? border-radius: 0;
- }
js:
- Page({
- ? data: {
- ? ? isAuth: false,
- ? ? src: ''
- ? },
- ? onLoad() {
- ? ? const _this = this
- ? ? wx.getSetting({
- ? ? ? success: res => {
- ? ? ? ? if (res.authSetting['scope.camera']) {
- ? ? ? ? ? // 用户已经授权
- ? ? ? ? ? _this.setData({
- ? ? ? ? ? ? isAuth: true
- ? ? ? ? ? })
- ? ? ? ? } else {
- ? ? ? ? ? // 用户还没有授权,向用户发起授权请求
- ? ? ? ? ? wx.authorize({
- ? ? ? ? ? ? scope: 'scope.camera',
- ? ? ? ? ? ? success() { // 用户同意授权
- ? ? ? ? ? ? ? _this.setData({
- ? ? ? ? ? ? ? ? isAuth: true
- ? ? ? ? ? ? ? })
- ? ? ? ? ? ? },
- ? ? ? ? ? ? fail() { // 用户不同意授权
- ? ? ? ? ? ? ? _this.openSetting().then(res => {
- ? ? ? ? ? ? ? ? _this.setData({
- ? ? ? ? ? ? ? ? ? isAuth: true
- ? ? ? ? ? ? ? ? })
- ? ? ? ? ? ? ? })
- ? ? ? ? ? ? }
- ? ? ? ? ? })
- ? ? ? ? }
- ? ? ? },
- ? ? ? fail: res => {
- ? ? ? ? console.log('获取用户授权信息失败')
- ? ? ? }
- ? ? })
- ? },
-
- ? // 打开授权设置界面
- ? openSetting() {
- ? ? const _this = this
- ? ? let promise = new Promise((resolve, reject) => {
- ? ? ? wx.showModal({
- ? ? ? ? title: '授权',
- ? ? ? ? content: '请先授权获取摄像头权限',
- ? ? ? ? success(res) {
- ? ? ? ? ? if (res.confirm) {
- ? ? ? ? ? ? wx.openSetting({
- ? ? ? ? ? ? ? success(res) {
- ? ? ? ? ? ? ? ? if (res.authSetting['scope.camera']) { // 用户打开了授权开关
- ? ? ? ? ? ? ? ? ? resolve(true)
- ? ? ? ? ? ? ? ? } else { // 用户没有打开授权开关, 继续打开设置页面
- ? ? ? ? ? ? ? ? ? _this.openSetting().then(res => {
- ? ? ? ? ? ? ? ? ? ? resolve(true)
- ? ? ? ? ? ? ? ? ? })
- ? ? ? ? ? ? ? ? }
- ? ? ? ? ? ? ? },
- ? ? ? ? ? ? ? fail(res) {
- ? ? ? ? ? ? ? ? console.log(res)
- ? ? ? ? ? ? ? }
- ? ? ? ? ? ? })
- ? ? ? ? ? } else if (res.cancel) {
- ? ? ? ? ? ? _this.openSetting().then(res => {
- ? ? ? ? ? ? ? resolve(true)
- ? ? ? ? ? ? })
- ? ? ? ? ? }
- ? ? ? ? }
- ? ? ? })
- ? ? })
- ? ? return promise;
- ? },
-
- ? takePhoto() {
- ? ? const ctx = wx.createCameraContext()
- ? ? ctx.takePhoto({
- ? ? ? quality: 'high',
- ? ? ? success: (res) => {
- ? ? ? ? this.setData({
- ? ? ? ? ? src: res.tempImagePath
- ? ? ? ? })
- ? ? ? ? wx.previewImage({
- ? ? ? ? ? current: res.tempImagePath, // 当前显示图片的http链接
- ? ? ? ? ? urls: [res.tempImagePath] // 需要预览的图片http链接列表
- ? ? ? ? })
- ? ? ? }
- ? ? })
- ? }
- })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。