除了支持 通用属性 以外,还支持如下属性。
名称 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
deviceposition | string | back | 否 | 前置或后置,取值为front、back。 |
flash | string | auto | 否 | 闪光灯,取值为auto、on、off、torch(手电筒常亮模式)。 |
framesize(1080+) | string | normal | 否 | 相机帧数尺寸,取值为low、normal、high。 |
autoexposurelock(1080+) | boolean | false | 否 | 曝光锁定。 |
autowhitebalancelock(1080+) | boolean | false | 否 | 白平衡锁定。 |
除了支持 通用事件 以外,还支持如下事件。
事件 | 描述 | 示例 |
|---|---|---|
error | 用户不允许使用摄像头时触发。 | <camera onerror="cameraError"> |
cameraframe(1080+) | 返回object.data类型的ArrayBuffer图像像素数据,一维数组。每四项表示一个像素点的 RGBA。 | <camera oncameraframe="cameraFrame"/> |
camerainitdone(1080+) | 相机初始化完成时触发。 | <camera oncamerainitdone="cameraInitDone"/> |
使用该方法,可以进行拍照。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
quality | string | 否 | 图像质量,取值为high、normal、low,默认值为normal。 |
cropimage(1076+) | boolean | 否 | 默认值为false。 当设置为true时,会对拍照生成的图片按Camera组件的大小进行裁剪。 |
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
uri | string | 照片路径。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
201 | 用户拒绝,获取相机权限失败。 |
使用该方法,可以设置最大和最小预览帧率,取值范围必须在支持的预览帧率范围内。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
previewfpsrange | object | 是 | 帧率范围,对象应包含最小值和最大值。示例: {'min':10,'max':30} |
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
201 | 用户拒绝授权相机权限。 |
202 | 不支持设置的最大值和最小值。 |
300 | 设备不支持设置的帧率范围。 |
使用该方法,可以获取支持的预览帧率范围。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
supportfpsrange | array | 如果获取支持的预览帧率范围成功,则返回类似数组[{"min":15000,"max":15000},{"min":7000,"max":30000}] 。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
300 | 设备无法获取支持的预览帧率范围。 |
使用该方法,可以获取设置的预览帧率范围。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
max | int | 预览的最大帧率。 |
min | int | 预览的最小帧率。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
300 | 设备无法获取设置的预览帧率范围。 |
使用该方法,可以设置曝光补偿值。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
exposurecompensation | int | 是 | 曝光补偿值。 |
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
201 | 用户拒绝授权相机权限。 |
202 | 不支持设置的最大值和最小值。 |
300 | 设备无法设置曝光补偿值。 |
使用该方法,可以获取支持的曝光补偿值范围。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
max | int | 支持的最大曝光补偿值。 |
min | int | 支持的最小曝光补偿值。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
300 | 设备无法获取支持的曝光补偿值范围。 |
使用该方法,可以获取设置的曝光补偿值。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
exposurecompensation | int | 之前设置的曝光补偿值。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
300 | 设备无法获取设置的曝光补偿值。 |
使用该方法,可以获取支持的场景模式。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
supportedscenemodes | array |
|
fail返回错误码:
错误码 | 说明 |
|---|---|
300 | 设备无法获取支持的场景模式。 |
使用该方法,可以启动录像。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
quality | string | 否 | 视频质量,取值包括high、low和normal。默认值为normal。 |
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
maxduration | int | 否 | 最大录像时长,单位为秒。默认值为600秒。 |
compressed | boolean | 否 | 是否启用视频压缩。默认值为false。 |
timeoutCallback | function | 否 | 录像超时回调,返回uri和thumbPath。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
uri | string | 视频路径。 |
thumbPath | string | 第一个视频缩略图的路径。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
201 | 用户拒绝授权相机权限。 |
使用该方法,可以停止录像。
OBJECT参数说明:
参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
success | function | 否 | 成功回调。 |
fail | function | 否 | 失败回调。 |
complete | function | 否 | 执行结束后的回调。 |
success返回值:
参数 | 类型 | 说明 |
|---|---|---|
uri | string | 视频路径。 |
thumbPath | string | 第一个视频缩略图的路径。 |
fail返回错误码:
错误码 | 说明 |
|---|---|
201 | 用户拒绝授权相机权限。 |
<template>
<!-- There can only be one root node in the template -->
<div class="container" style=" width: 100%; height:100%">
<stack class="stack" style=" width: 100%; height:100%">
<camera
id="camera"
style=" width: 600px; height:600px"
deviceposition="{{devicepositionVal}}"
flash="{{flashVal}}"
autoexposurelock="{{autoExposureLockVal}}"
autowhitebalancelock="{{autoWhiteBalanceLockVal}}"
framesize="{{frameSizeVal}}"
onerror="error"
oncamerainitdone="cameraInitDoneEvent"
oncameraframe="cameraFrameEvent">
</camera>
<div class="item-container">
<input class="btn" type="button" onclick="takePhoto" value="takePhoto"></input>
<input id="deviceposition-private-css" class="btn" type="button" value="改变deviceposition" onclick="devicepositionEvent" />
<input id="flash-private-css" class="btn" type="button" value="改变flash" onclick="flashEvent" />
<input id="framesize-private-css" class="btn" type="button" onclick="changeFrameSize" value="framesize"></input>
<input id="autowhitebalancelock-private-css" class="btn" type="button" onclick="changeWhiteBalanceLock" value="AWB lock"></input>
<input id="autoexposurelock-private-css" class="btn" type="button" onclick="changeExposureLock" value="AE lock"></input>
<image src="{{photoUri}}"></image>
</div>
</stack>
</div>
</template>
<style>
@import '../../../common/css/common.css';
.stack {
height: 300px;
align-items: flex-start;
}
.title {
font-size: 100px;
}
.btn {
font-size: 10px;
margin-left: 5px;
margin-right: 5px;
width: 100px;
height: 50px;
}
</style>
<script>
export default {
data: {
title: 'camera',
photoUri: "",
devicepositionIndex: 0,
devicepositionVal: "",
flashIndex: 0,
flashVal: "",
autoexposurelockIndex:0,
autoExposureLockVal:"",
autoWhiteBalanceLockIndex:0,
autoWhiteBalanceLockVal:"",
frameSizeIndex:0,
frameSizeVal:"",
},
onInit() {
this.$page.setTitleBar({
text: 'menu',
textColor: '#ffffff',
backgroundColor: '#007DFF',
backgroundOpacity: 0.5
})
},
onReady() {
},
devicepositionEvent() {
if (this.devicepositionIndex === 0) {
this.devicepositionVal = "front"
} else if (this.devicepositionIndex === 1) {
this.devicepositionVal = "back"
}
this.devicepositionIndex++
},
flashEvent() {
if (this.flashIndex === 0) {
this.flashVal = "auto"
} else if (this.flashIndex === 1) {
this.flashVal = "on"
} else if (this.flashIndex === 2) {
this.flashVal = "off"
} else if (this.flashIndex === 3) {
this.flashVal = "torch"
}
this.flashIndex++
},
takePhoto() {
var camera = this.$element('camera');
//camera.flash = "flash_on";
console.log("take photo =" + camera.flash);
camera.takePhoto({
quality: "high",
success: (res) => {
console.log("res =" + res.uri);
this.photoUri = res.uri;
},
fail: (erromsg, errocode) => {
console.log('media.takePhoto----------' + errocode + ': ' + erromsg)
}
})
},
error(e) {
console.error(e.detail)
},
cameraInitDoneEvent(data){
console.log(data)
},
cameraFrameEvent(data){
console.log(data)
},
changeFrameSize(){
const camera = this.$element('camera')
if(this.frameSizeIndex === 0){
this.frameSizeVal = "low"
this.frameSizeIndex = 1
}else if(this.frameSizeIndex === 1){
this.frameSizeVal ="normal"
this.frameSizeIndex = 2
} else if(this.frameSizeIndex === 2){
this.frameSizeVal = "high"
}
},
changeWhiteBalanceLock(){
if(this.autoWhiteBalanceLockIndex === 0){
this.autoWhiteBalanceLockVal = "true"
this.autoWhiteBalanceLockIndex = 1
}else if(this.autoWhiteBalanceLockIndex === 1){
this.autoWhiteBalanceLockVal ="false"
}
},
changeExposureLock(){
if(this.autoexposurelockIndex === 0){
this.autoExposureLockVal = "true"
this.autoexposurelockIndex=1
}else if(this.autoexposurelockIndex === 1) {
this.autoExposureLockVal = "false"
}
}
}
</script> 示例代码效果图:

版本 | 发布日期 | 描述 |
|---|---|---|
1090 | 2022-05-19 | 新增startRecord和stopRecord方法。 |
1080 | 2021-12-28 |
|
1070 | 2020-05-19 | 新增 autoorientation 属性,用于设置图片是否随设备重力方向发生变化调整。 |
1040 | 2019-06-24 | 第一次正式发布。 |