本文实例为大家分享了微信小程序调用摄像头实现拍照的具体代码,供大家参考,具体内容如下
微信小程序开发文档
首先,需要用户授权摄像头权限,这一步是必须的
具体步骤:
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。