小程序中实现拍照,自拍功能

前言:

       小程序中实现自拍功能,拍照功能。

官网入口

目录

实现效果:

实现步骤:

1、index.wxml,我这里是用了vant的框架,如果不想要,直接把里面的camera和底下的button拿走使用

配置属性api,更多请看最下面的api

2、index.js部分,需要在camera组件中调用相关函数才能实现拍照功能

配置方法api,更多请看最下面的api

(1)data部分

(2)拍照功能和打开弹框功能,如果没有使用vant,只用第一个就够用了

配置的api参考文档:

1、camera

2、CameraContext.takePhoto(Object object)拍摄照片

更多参考文献:


实现效果:

(小程序开发模式下无法查看,必须真机调试手机上才可以看效果,底下这个是自拍效果)

这里使用的是camera是实现的效果。

实现步骤:

1、index.wxml,我这里是用了vant的框架,如果不想要,直接把里面的camera和底下的button拿走使用

配置属性api,更多请看最下面的api

属性名

类型

默认值

说明

mode

String

normal

有效值为 normal, scanCode

device-position

String

back

前置或后置,值为front, back

flash

String

auto

闪光灯,值为auto, on, off

bindstop

EventHandle

 

摄像头在非正常终止时触发,如退出后台等情况

binderror

EventHandle

 

用户不允许使用摄像头时触发

bindscancode

EventHandle

 

在扫码识别成功时触发,仅在 mode="scanCode" 时生效

 <view class="page__bd">
        <van-button bindtap='openPhotoModal'>签到</van-button>
        <van-dialog
                use-slot
                title="签到"
                show="{{ photo_show }}"
                confirm-button-text="拍照"
                bind:confirm="takePhoto"
        >
            <camera device-position="front" flash="on" style="width: 100%; height: 450px;"></camera>
            <!--<button type="primary" bindtap="takePhoto">拍照</button>-->
        </van-dialog>

        <b-map></b-map>


    </view>

2、index.js部分,需要在camera组件中调用相关函数才能实现拍照功能

配置方法api,更多请看最下面的api

属性

类型

默认值

是否必填

说明

quality

string

normal

成像质量

success

function

 

接口调用成功的回调函数

fail

function

 

接口调用失败的回调函数

complete

function

 

接口调用结束的回调函数(调用成功、失败都会执行)

(1)data部分

 data: {

        img_src:'',//自拍图片
        photo_show:false,//自拍弹框是否显示

    },

(2)拍照功能和打开弹框功能,如果没有使用vant,只用第一个就够用了

    /**
     * 拍照功能
     * */
    takePhoto() {
        const ctx = wx.createCameraContext()
        ctx.takePhoto({
            quality: 'high',
            success: (res) => {
                this.setData({
                    img_src: res.tempImagePath,
                    photo_show: false
                })
            }
        })
    },
    /**
     * 打开自拍弹框
     * */
    openPhotoModal(){
        this.setData({
            photo_show: true
        })
    },

配置的api参考文档:

1、camera

基础库 1.6.0 开始支持,低版本需做兼容处理

系统相机。扫码二维码功能,需升级微信客户端至6.7.3。需要用户授权 scope.camera。 2.10.0起 initdone 事件返回 maxZoom,最大变焦范围,相关接口 CameraContext.setZoom

相关api:wx.createCameraContext

属性类型默认值必填说明最低版本
modestringnormal应用模式,只在初始化时有效,不能动态变更2.1.0
resolutionstringmedium分辨率,不支持动态修改2.10.0
device-positionstringback摄像头朝向1.0.0
flashstringauto闪光灯,值为auto, on, off1.0.0
frame-sizestringmedium指定期望的相机帧数据尺寸2.7.0
bindstopeventhandle 摄像头在非正常终止时触发,如退出后台等情况1.0.0
binderroreventhandle 用户不允许使用摄像头时触发1.0.0
bindinitdoneeventhandle 相机初始化完成时触发,e.detail = {maxZoom}2.7.0
bindscancodeeventhandle 在扫码识别成功时触发,仅在 mode="scanCode" 时生效2.1.0

mode 的合法值

说明最低版本
normal相机模式 
scanCode扫码模式 

resolution 的合法值

说明最低版本
low 
medium 
high 

device-position 的合法值

说明最低版本
front前置 
back后置 

flash 的合法值

说明最低版本
auto自动 
on打开 
off关闭 
torch常亮2.8.0

frame-size 的合法值

说明最低版本
small小尺寸帧数据 
medium中尺寸帧数据 
large大尺寸帧数据

2、CameraContext.takePhoto(Object object)拍摄照片

参数

Object object

属性类型默认值必填说明
qualitystringnormal成像质量
successfunction 接口调用成功的回调函数
failfunction 接口调用失败的回调函数
completefunction 接口调用结束的回调函数(调用成功、失败都会执行)

object.quality 的合法值

说明最低版本
high高质量 
normal普通质量 
low低质量 

object.success 回调函数

参数

Object res

属性类型说明
tempImagePathstring照片文件的临时路径 (本地路径),安卓是jpg图片格式,ios是png

更多参考文献:

https://cloud.tencent.com/developer/article/1361745

到此就结束了,有任何问题,欢迎一起探讨!

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
微信小程序提供了wx.createCameraContext()方法来创建相机上下文对象,以实现拍照和录像功能实现拍照功能: 1. 在wxml文件添加一个按钮,点击时触发拍照事件: ``` <button bindtap="takePhoto">拍照</button> ``` 2. 在对应的js文件定义takePhoto方法: ``` Page({ takePhoto() { const ctx = wx.createCameraContext(); ctx.takePhoto({ quality: 'high', success: (res) => { this.setData({ src: res.tempImagePath }) } }) } }) ``` 3. 调用createCameraContext()方法创建相机上下文对象,然后调用takePhoto()方法,设置照片质量和成功后的回调函数,将拍摄的照片临时路径存储在data实现录像功能: 1. 在wxml文件添加一个按钮,点击时触发录像事件: ``` <button bindtap="startRecord">开始录像</button> <button bindtap="stopRecord">停止录像</button> ``` 2. 在对应的js文件定义startRecord和stopRecord方法: ``` Page({ data: { videoSrc: '' }, startRecord() { const ctx = wx.createCameraContext(); ctx.startRecord({ success: (res) => { console.log('startRecord') } }) }, stopRecord() { const ctx = wx.createCameraContext(); ctx.stopRecord({ success: (res) => { this.setData({ videoSrc: res.tempVideoPath }) } }) } }) ``` 3. 调用createCameraContext()方法创建相机上下文对象,然后调用startRecord()方法开始录像,调用stopRecord()方法停止录像并将录制的视频临时路径存储在data。 需要注意的是,在小程序使用摄像头时,需要在app.json文件添加相机权限: ``` { "permissions": { "scope.camera": { "desc": "用于拍照和录像" } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值