Appearance
使用方法
安卓相机操作UTS原生插件集成了相机常用功能,拍照,录像,曝光调节,焦距调节,闪光点开关灯,拍照可自定义水印,支持静默拍照和录像,插件支持uniapp和uniapp x,支持vue2和vue3的选项式和组合式
提醒
如果插件需要扩展其他功能请联系作者
插件使用注意事项
- 如果您在使用插件的过程中有任何问题,可以联系作者,作者将全力协助您使用插件
- 本文档同时提供了uniapp的用法示例和uniappx的用法示例,插件市场导入的示例项目仅为uniapp的用法示例,如果您需要uniappx的示例项目可以通过下方的链接下载示例
- 组件只能在nvue/uvue页面中使用,不支持vue页面
相关链接
- 无预览静默拍照
当前插件的1.*版本,该版本不支持uniappx
联系作者

关注微信公众号可联系作者
插件地址
https://ext.dcloud.net.cn/plugin?id=27184
权限
- android.permission.CAMERA
- android.hardware.camera
- android.hardware.camera.autofocus
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.READ_EXTERNAL_STORAGE
API用法
在使用插件的地方引入以下代码:
js
import * as module from "@/uni_modules/leven-uts-camera"js
import * as module from "@/uni_modules/leven-uts-camera"组件用法
在使用插件的地方引入以下代码:
vue
<leven-uts-camera ref="refCamera" style="flex:1; height: 500px;" :config="config" @onError="onError"
@onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-uts-camera>vue
<leven-uts-camera ref="refLevenCamera" style="flex:1; height: 500px;" :configX="config" @onError="onError"
@onEventMethod="onEventMethod">
</leven-uts-camera>
//组件的引用
const refLevenCamera = ref<LevenUtsCameraElement | null>(null)页面内容
API页面
vue
<template>
<view class="content">
<uni-card title="其他功能">
<button type="primary" @click="requestPermissions">申请插件所需权限</button>
<button type="primary" @click="checkAllFilesPermission">检查是否有所有文件访问权限</button>
<button type="primary" @click="toAllFilesPermissionPage">跳转到所有文件访问权限页面</button>
<button type="primary" @click="toPage('noPreview')">静默模式</button>
<button type="primary" @click="toPage('preview')">预览模式</button>
</uni-card>
</view>
</template>
<script>
// const module = uni.requireNativePlugin("leven-camera-CameraModule");
import * as module from "@/uni_modules/leven-uts-camera"
export default {
data() {
return {}
},
onLoad() {
},
methods: {
//跳转页面
toPage(type) {
switch (type) {
case 'noPreview':
uni.navigateTo({
url: "/pages/index/noPreview"
})
break;
case 'preview':
uni.navigateTo({
url: "/pages/index/preview"
})
break;
}
},
requestPermissions() {
module.requestPermissions({
//参数
params: {
permissions: [
'android.permission.WRITE_EXTERNAL_STORAGE',
'android.permission.READ_EXTERNAL_STORAGE',
'android.permission.RECORD_AUDIO',
'android.permission.CAMERA'
]
},
//成功执行的函数
success: (res) => {
console.log(res)
},
//失败执行的函数
fail: (res) => {
console.log(res)
},
//接口调用完成返回函数,不管成功还是失败都会返回
complete: (res) => {
console.log(res)
}
})
},
//检查所有文件访问权限
checkAllFilesPermission() {
module.checkAllFilesPermission({
//成功执行的函数
success: (res) => {
console.log(res)
},
//失败执行的函数
fail: (res) => {
console.log(res)
},
//接口调用完成返回函数,不管成功还是失败都会返回
complete: (res) => {
console.log(res)
}
})
},
//跳转到所有文件访问权限页面
toAllFilesPermissionPage() {
module.toAllFilesPermissionPage({
//成功执行的函数
success: (res) => {
console.log(res)
},
//失败执行的函数
fail: (res) => {
console.log(res)
},
//接口调用完成返回函数,不管成功还是失败都会返回
complete: (res) => {
console.log(res)
}
})
}
}
}
</script>
<style>
</style>vue
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<leven-ui-card title="API功能">
<button type="primary" @click="requestPermissions">申请插件所需权限</button>
<button type="primary" @click="checkAllFilesPermission">检查是否有所有文件访问权限</button>
<button type="primary" @click="toAllFilesPermissionPage">跳转到所有文件访问权限页面</button>
<button type="primary" @click="toPage('noPreview')">静默模式</button>
<button type="primary" @click="toPage('preview')">预览模式</button>
</leven-ui-card>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script setup>
import * as module from "@/uni_modules/leven-uts-camera"
import { LevenOptions } from "@/uni_modules/leven-uts-camera"
//跳转页面
function toPage(type : string) {
switch (type) {
case 'noPreview':
uni.navigateTo({
url: "/pages/camera/noPreview"
})
break;
case 'preview':
uni.navigateTo({
url: "/pages/camera/preview"
})
break;
}
}
//跳转到所有文件访问权限页面
function toAllFilesPermissionPage() {
module.toAllFilesPermissionPage({
//成功执行的函数
success: (res) => {
console.log(res)
},
//失败执行的函数
fail: (res) => {
console.log(res)
},
//接口调用完成返回函数,不管成功还是失败都会返回
// complete: (res) => {
// console.log(res)
// }
} as LevenOptions)
}
//检查是否有所有文件访问权限
function checkAllFilesPermission() {
module.checkAllFilesPermission({
//成功执行的函数
success: (res) => {
console.log(res)
},
//失败执行的函数
fail: (res) => {
console.log(res)
},
//接口调用完成返回函数,不管成功还是失败都会返回
// complete: (res) => {
// console.log(res)
// }
} as LevenOptions)
}
//申请插件所需权限
function requestPermissions() {
module.requestPermissions({
//参数
params: {
permissions: [
'android.permission.WRITE_EXTERNAL_STORAGE',
'android.permission.READ_EXTERNAL_STORAGE',
'android.permission.RECORD_AUDIO',
'android.permission.CAMERA'
]
},
success: (res) => {
console.log(res)
},
fail: (res) => {
console.log(res)
},
//接口调用完成返回函数,不管成功还是失败都会返回
// complete: (res) => {
// console.log(res)
// }
} as LevenOptions)
}
</script>
<style>
</style>组件页面
预览模式
vue
<template>
<view>
<view style="flex: 1; height: 300px;">
<leven-uts-camera ref="refCamera" style="flex:1; height: 500px;" :config="config" @onError="onError"
@onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-uts-camera>
</view>
<button type="primary" @click="setFlashMode">设置闪光灯模式</button>
<button type="primary" @click="setZoom">设置焦距</button>
<button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
<button type="primary" @click="setExposure">设置曝光</button>
<button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
<button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
<button type="primary" @click="stopPreview">关闭预览</button>
<button type="primary" @click="startPreview">开启预览</button>
<button type="primary" @click="switchCamera">切换摄像头</button>
<button type="primary" @click="takePicture">拍照</button>
<button type="primary" @click="startRecording">开始录像</button>
<button type="primary" @click="stopRecording">结束录像</button>
</view>
</template>
<script>
export default {
data() {
return {
config: {
//视图的圆角值
radius: 10,
//图片保存目录
// pictureDir: "",
//视频保存目录
// videoDir: "",
//摄像头旋转角度
// rotation: 0,
//默认打开的摄像头,0:前置,1:后置
// facing: 0,
//闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
flashModel: 0,
//分辨率
// size: [1920, 1080],
//拍照质量,可选值:quality、latency
// captureMode: "quality",
//录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
// videoQuality: "HIGHEST"
},
//曝光度
exposure: 0,
//焦距
zoom: 1.0,
}
},
methods: {
//设置闪光点模式
setFlashMode() {
this.config.flashModel++;
if (this.config.flashModel > 2) {
this.config.flashModel = 0;
}
this.$refs.refCamera.setFlashMode({
flashMode: this.config.flashModel
});
},
//设置焦距
setZoom() {
this.zoom++;
if (this.zoom > 8) {
this.zoom = 1;
}
this.$refs.refCamera.setZoom({
zoom: this.zoom
});
},
//获取相机支持的焦距
getZoomRange() {
this.$refs.refCamera.getZoomRange();
},
//设置曝光
setExposure() {
this.exposure++;
if (this.exposure > 24) {
this.exposure = -24;
}
this.$refs.refCamera.setExposure({
value: this.exposure
});
},
//获取相机支持的曝光度
getExposureRange() {
this.$refs.refCamera.getExposureRange();
},
//获取相机是否支持曝光度
isExposureSupported() {
this.$refs.refCamera.isExposureSupported();
},
//结束录像
stopRecording() {
this.$refs.refCamera.stopRecording();
},
//开始录像
startRecording() {
this.$refs.refCamera.startRecording();
},
//拍照
takePicture() {
this.$refs.refCamera.takePicture({
//水印
"water": [{
//水印内容
"text": "这是一条测试水印",
//文本颜色,默认:白色
"color": "#FFFFFF",
//文本大小,默认:20
"textSize": 40,
//文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
"typeFace": "NORMAL",
//是否使用抗锯齿功能,默认:true
"antiAlia": true,
//透明度(0~255),默认:128
"alpha": 128,
//水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
"position": 2,
//水印左边距,默认:40
"leftMargin": 40,
//水印右边距,默认:40
"rightMargin": 40,
//水印上边距,默认:40
"topMargin": 40,
//水印下边距,默认:40
"bottomMargin": 40
}]
});
},
//切换摄像头
switchCamera() {
this.$refs.refCamera.switchCamera();
},
//开启预览
startPreview() {
this.$refs.refCamera.startPreview();
},
//关闭预览
stopPreview() {
this.$refs.refCamera.stopPreview();
},
//**********************事件***********************
//错误事件
onError(e) {
console.log(e.detail)
},
//其他事件
onEvent(e) {
console.log(e.detail)
},
//方法事件
onEventMethod(e) {
// console.log(e.detail)
let detail = e.detail;
let type = detail.type;
let resultData = detail.data;
switch (type) {
case "stopPreview":
//关闭预览
console.log("关闭预览:" + JSON.stringify(resultData))
break
case "startPreview":
//开启预览
console.log("开启预览:" + JSON.stringify(resultData))
break
case "switchCamera":
//切换摄像头
console.log("切换摄像头:" + JSON.stringify(resultData))
break
case "takePicture":
//拍照
console.log("拍照:" + JSON.stringify(resultData))
break
case "startRecording":
//开始录像
console.log("开始录像:" + JSON.stringify(resultData))
break
case "stopRecording":
//结束录像
console.log("结束录像:" + JSON.stringify(resultData))
break
case "isExposureSupported":
//获取相机是否支持曝光度
console.log("获取相机是否支持曝光度:" + JSON.stringify(resultData))
break
case "getExposureRange":
//获取相机是否支持曝光度
console.log("获取相机支持的曝光度:" + JSON.stringify(resultData))
break
case "setExposure":
//设置曝光
console.log("设置曝光:" + JSON.stringify(resultData))
break
case "getZoomRange":
//获取相机支持的焦距
console.log("获取相机支持的焦距:" + JSON.stringify(resultData))
break
case "setZoom":
//设置焦距
console.log("设置焦距:" + JSON.stringify(resultData))
break
case "setFlashMode":
//设置闪光灯模式
console.log("设置闪光灯模式:" + JSON.stringify(resultData))
break
}
}
}
}
</script>
<style>
</style>vue
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<view style="width: 750rpx; height: 500px; position: relative;">
<leven-uts-camera ref="refLevenCamera" style="flex:1; height: 500px;" :configX="config" @onError="onError"
@onEventMethod="onEventMethod">
</leven-uts-camera>
</view>
<leven-ui-card title="组件方法">
<button type="primary" @click="setFlashMode">设置闪光灯模式</button>
<button type="primary" @click="setZoom">设置焦距</button>
<button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
<button type="primary" @click="setExposure">设置曝光</button>
<button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
<button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
<button type="primary" @click="stopPreview">关闭预览</button>
<button type="primary" @click="startPreview">开启预览</button>
<button type="primary" @click="switchCamera">切换摄像头</button>
<button type="primary" @click="takePicture">拍照</button>
<button type="primary" @click="startRecording">开始录像</button>
<button type="primary" @click="stopRecording">结束录像</button>
</leven-ui-card>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script lang="uts" setup>
import JSONObject from 'com.alibaba.fastjson.JSONObject'
//组件引用
const refLevenCamera = ref<LevenUtsCameraElement | null>(null)
//组件初始化配置
const config = ref({
//视图的圆角值
radius: 10,
//图片保存目录
// pictureDir: "",
//视频保存目录
// videoDir: "",
//摄像头旋转角度
// rotation: 0,
//默认打开的摄像头,0:前置,1:后置
// facing: 0,
//闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
flashModel: 0,
//分辨率
// size: [1920, 1080],
//拍照质量,可选值:quality、latency
// captureMode: "quality",
//录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
// videoQuality: "HIGHEST"
})
//曝光度
const exposure = ref(0)
//焦距
const zoom = ref(1.0)
//设置闪光点模式
function setFlashMode() {
let flash = config.value['flashModel'] as number;
flash++;
if (flash > 2) {
flash = 0;
}
config.value['flashModel'] = flash;
let options = {
flashMode: config.value['flashModel']
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.setFlashMode(params);
}
//设置焦距
function setZoom() {
zoom.value++;
if (zoom.value > 8) {
zoom.value = 1;
}
let options = {
zoom: zoom.value
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.setZoom(params);
}
//获取相机支持的焦距
function getZoomRange() {
refLevenCamera.value?.getZoomRange();
}
//设置曝光
function setExposure() {
exposure.value++;
if (exposure.value > 24) {
exposure.value = -24;
}
let options = {
value: exposure.value
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.setExposure(params);
}
//获取相机支持的曝光度
function getExposureRange() {
refLevenCamera.value?.getExposureRange();
}
//获取相机是否支持曝光度
function isExposureSupported() {
refLevenCamera.value?.isExposureSupported();
}
//结束录像
function stopRecording() {
refLevenCamera.value?.stopRecording();
}
//开始录像
function startRecording() {
refLevenCamera.value?.startRecording();
}
//拍照
function takePicture() {
let options = {
//水印
"water": [{
//水印内容
"text": "这是一条测试水印",
//文本颜色,默认:白色
"color": "#FFFFFF",
//文本大小,默认:20
"textSize": 40,
//文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
"typeFace": "NORMAL",
//是否使用抗锯齿功能,默认:true
"antiAlia": true,
//透明度(0~255),默认:128
"alpha": 128,
//水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
"position": 2,
//水印左边距,默认:40
"leftMargin": 40,
//水印右边距,默认:40
"rightMargin": 40,
//水印上边距,默认:40
"topMargin": 40,
//水印下边距,默认:40
"bottomMargin": 40
}]
}
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.takePicture(params);
}
//切换摄像头
function switchCamera() {
refLevenCamera.value?.switchCamera();
}
//开启预览
function startPreview() {
refLevenCamera.value?.startPreview();
}
//关闭预览
function stopPreview() {
refLevenCamera.value?.stopPreview();
}
//错误事件
function onError(e : JSONObject) {
console.log(e)
}
//方法事件
function onEventMethod(e : JSONObject) {
console.log(e)
//类型
let type : string = e.getString("type");
//数据
let data : JSONObject = e.getJSONObject("data");
//状态
// let code : number = data.getInteger("code");
// //实际数据
// let resultData : JSONObject = data.getJSONObject("data");
// //错误消息提示
// let message : string = data.getString("message");
switch (type) {
case "stopPreview":
//关闭预览
console.log("关闭预览:" + data.toJSONString())
break
case "startPreview":
//开启预览
console.log("开启预览:" + data.toJSONString())
break
case "switchCamera":
//切换摄像头
console.log("切换摄像头:" + data.toJSONString())
break
case "takePicture":
//拍照
console.log("拍照:" + data.toJSONString())
break
case "startRecording":
//开始录像
console.log("开始录像:" + data.toJSONString())
break
case "stopRecording":
//结束录像
console.log("结束录像:" + data.toJSONString())
break
case "isExposureSupported":
//获取相机是否支持曝光度
console.log("获取相机是否支持曝光度:" + data.toJSONString())
break
case "getExposureRange":
//获取相机是否支持曝光度
console.log("获取相机支持的曝光度:" + data.toJSONString())
break
case "setExposure":
//设置曝光
console.log("设置曝光:" + data.toJSONString())
break
case "getZoomRange":
//获取相机支持的焦距
console.log("获取相机支持的焦距:" + data.toJSONString())
break
case "setZoom":
//设置焦距
console.log("设置焦距:" + data.toJSONString())
break
case "setFlashMode":
//设置闪光灯模式
console.log("设置闪光灯模式:" + data.toJSONString())
break
}
}
</script>
<style lang="scss">
.popup-contaner {
background-color: #FFFFFF;
border-radius: 8px 8px 0 0;
&-title {
padding: 16px;
border-bottom: 1px solid #f2f2f2;
flex-direction: row;
justify-content: center;
align-items: center;
}
&-content {
padding: 16px;
max-height: 500px;
}
}
</style>静默模式
vue
<template>
<view>
<view>
<leven-uts-camera ref="refCamera" :config="config" @onError="onError" @onEventMethod="onEventMethod">
</leven-uts-camera>
</view>
<button type="primary" @click="setFlashMode">设置闪光灯模式</button>
<button type="primary" @click="setZoom">设置焦距</button>
<button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
<button type="primary" @click="setExposure">设置曝光</button>
<button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
<button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
<button type="primary" @click="stopPreview">关闭预览</button>
<button type="primary" @click="startPreview">开启预览</button>
<button type="primary" @click="switchCamera">切换摄像头</button>
<button type="primary" @click="takePicture">拍照</button>
<button type="primary" @click="startRecording">开始录像</button>
<button type="primary" @click="stopRecording">结束录像</button>
</view>
</template>
<script>
export default {
data() {
return {
config: {
//视图的圆角值
radius: 10,
//图片保存目录
// pictureDir: "",
//视频保存目录
// videoDir: "",
//摄像头旋转角度
// rotation: 0,
//默认打开的摄像头,0:前置,1:后置
// facing: 0,
//闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
flashModel: 0,
//分辨率
// size: [1920, 1080],
//拍照质量,可选值:quality、latency
// captureMode: "quality",
//录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
// videoQuality: "HIGHEST",
//静默模式
isSilence: true
},
//曝光度
exposure: 0,
//焦距
zoom: 1.0,
}
},
methods: {
//设置闪光点模式
setFlashMode() {
this.config.flashModel++;
if (this.config.flashModel > 2) {
this.config.flashModel = 0;
}
this.$refs.refCamera.setFlashMode({
flashMode: this.config.flashModel
});
},
//设置焦距
setZoom() {
this.zoom++;
if (this.zoom > 8) {
this.zoom = 1;
}
this.$refs.refCamera.setZoom({
zoom: this.zoom
});
},
//获取相机支持的焦距
getZoomRange() {
this.$refs.refCamera.getZoomRange();
},
//获取相机支持的曝光度
setExposure() {
this.exposure++;
if (this.exposure > 24) {
this.exposure = -24;
}
this.$refs.refCamera.setExposure({
value: this.exposure
});
},
//获取相机支持的曝光度
getExposureRange() {
this.$refs.refCamera.getExposureRange();
},
//获取相机是否支持曝光度
isExposureSupported() {
this.$refs.refCamera.isExposureSupported();
},
//结束录像
stopRecording() {
this.$refs.refCamera.stopRecording();
},
//开始录像
startRecording() {
this.$refs.refCamera.startRecording();
},
//拍照
takePicture() {
this.$refs.refCamera.takePicture({
//水印
"water": [{
//水印内容
"text": "这是一条测试水印",
//文本颜色,默认:白色
"color": "#FFFFFF",
//文本大小,默认:20
"textSize": 40,
//文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
"typeFace": "NORMAL",
//是否使用抗锯齿功能,默认:true
"antiAlia": true,
//透明度(0~255),默认:128
"alpha": 128,
//水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
"position": 2,
//水印左边距,默认:40
"leftMargin": 40,
//水印右边距,默认:40
"rightMargin": 40,
//水印上边距,默认:40
"topMargin": 40,
//水印下边距,默认:40
"bottomMargin": 40
}]
});
},
//切换摄像头
switchCamera() {
this.$refs.refCamera.switchCamera();
},
//开启预览
startPreview() {
this.$refs.refCamera.startPreview();
},
//关闭预览
stopPreview() {
this.$refs.refCamera.stopPreview();
},
//**********************事件***********************
//错误事件
onError(e) {
console.log(e.detail)
},
//方法事件
onEventMethod(e) {
let detail = e.detail;
let type = detail.type;
let resultData = detail.data;
switch (type) {
case "stopPreview":
//关闭预览
console.log("关闭预览:" + JSON.stringify(resultData))
break
case "startPreview":
//开启预览
console.log("开启预览:" + JSON.stringify(resultData))
break
case "switchCamera":
//切换摄像头
console.log("切换摄像头:" + JSON.stringify(resultData))
break
case "takePicture":
//拍照
console.log("拍照:" + JSON.stringify(resultData))
break
case "startRecording":
//开始录像
console.log("开始录像:" + JSON.stringify(resultData))
break
case "stopRecording":
//结束录像
console.log("结束录像:" + JSON.stringify(resultData))
break
case "isExposureSupported":
//获取相机是否支持曝光度
console.log("获取相机是否支持曝光度:" + JSON.stringify(resultData))
break
case "getExposureRange":
//获取相机是否支持曝光度
console.log("获取相机支持的曝光度:" + JSON.stringify(resultData))
break
case "setExposure":
//设置曝光
console.log("设置曝光:" + JSON.stringify(resultData))
break
case "getZoomRange":
//获取相机支持的焦距
console.log("获取相机支持的焦距:" + JSON.stringify(resultData))
break
case "setZoom":
//设置焦距
console.log("设置焦距:" + JSON.stringify(resultData))
break
case "setFlashMode":
//设置闪光灯模式
console.log("设置闪光灯模式:" + JSON.stringify(resultData))
break
}
}
}
}
</script>
<style>
</style>vue
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<leven-uts-camera ref="refLevenCamera" style="width: 0px; height: 0px;" :configX="config" @onError="onError"
@onEventMethod="onEventMethod">
</leven-uts-camera>
<leven-ui-card title="组件方法">
<button type="primary" @click="setFlashMode">设置闪光灯模式</button>
<button type="primary" @click="setZoom">设置焦距</button>
<button type="primary" @click="getZoomRange">获取相机支持的焦距</button>
<button type="primary" @click="setExposure">设置曝光</button>
<button type="primary" @click="getExposureRange">获取相机支持的曝光度</button>
<button type="primary" @click="isExposureSupported">获取相机是否支持曝光度</button>
<button type="primary" @click="stopPreview">关闭预览</button>
<button type="primary" @click="startPreview">开启预览</button>
<button type="primary" @click="switchCamera">切换摄像头</button>
<button type="primary" @click="takePicture">拍照</button>
<button type="primary" @click="startRecording">开始录像</button>
<button type="primary" @click="stopRecording">结束录像</button>
</leven-ui-card>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script lang="uts" setup>
import JSONObject from 'com.alibaba.fastjson.JSONObject'
//组件引用
const refLevenCamera = ref<LevenUtsCameraElement | null>(null)
//组件初始化配置
const config = ref({
//视图的圆角值
radius: 10,
//图片保存目录
// pictureDir: "",
//视频保存目录
// videoDir: "",
//摄像头旋转角度
// rotation: 0,
//默认打开的摄像头,0:前置,1:后置
// facing: 0,
//闪光灯模式,0.自动,1.一直打开,2.关闭,前置摄像头无效
flashModel: 0,
//分辨率
// size: [1920, 1080],
//拍照质量,可选值:quality、latency
// captureMode: "quality",
//录像质量,可选值:SD、HD、FHD、UHD、LOWEST、HIGHEST
// videoQuality: "HIGHEST",
//静默模式
isSilence: true
})
//曝光度
const exposure = ref(0)
//焦距
const zoom = ref(1.0)
//设置闪光点模式
function setFlashMode() {
let flash = config.value['flashModel'] as number;
flash++;
if (flash > 2) {
flash = 0;
}
config.value['flashModel'] = flash;
let options = {
flashMode: config.value['flashModel']
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.setFlashMode(params);
}
//设置焦距
function setZoom() {
zoom.value++;
if (zoom.value > 8) {
zoom.value = 1;
}
let options = {
zoom: zoom.value
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.setZoom(params);
}
//获取相机支持的焦距
function getZoomRange() {
refLevenCamera.value?.getZoomRange();
}
//设置曝光
function setExposure() {
exposure.value++;
if (exposure.value > 24) {
exposure.value = -24;
}
let options = {
value: exposure.value
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.setExposure(params);
}
//获取相机支持的曝光度
function getExposureRange() {
refLevenCamera.value?.getExposureRange();
}
//获取相机是否支持曝光度
function isExposureSupported() {
refLevenCamera.value?.isExposureSupported();
}
//结束录像
function stopRecording() {
refLevenCamera.value?.stopRecording();
}
//开始录像
function startRecording() {
refLevenCamera.value?.startRecording();
}
//拍照
function takePicture() {
let options = {
//水印
"water": [{
//水印内容
"text": "这是一条测试水印",
//文本颜色,默认:白色
"color": "#FFFFFF",
//文本大小,默认:20
"textSize": 40,
//文本样式,NORMAL:常规(默认),BOLD:加粗,ITALIC:斜体,BOLD_ITALIC:斜体加粗
"typeFace": "NORMAL",
//是否使用抗锯齿功能,默认:true
"antiAlia": true,
//透明度(0~255),默认:128
"alpha": 128,
//水印位置,0:左上角(默认),1.右上角,2.左下角,3.右下角
"position": 2,
//水印左边距,默认:40
"leftMargin": 40,
//水印右边距,默认:40
"rightMargin": 40,
//水印上边距,默认:40
"topMargin": 40,
//水印下边距,默认:40
"bottomMargin": 40
}]
}
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refLevenCamera.value?.takePicture(params);
}
//切换摄像头
function switchCamera() {
refLevenCamera.value?.switchCamera();
}
//开启预览
function startPreview() {
refLevenCamera.value?.startPreview();
}
//关闭预览
function stopPreview() {
refLevenCamera.value?.stopPreview();
}
//错误事件
function onError(e : JSONObject) {
console.log(e)
}
//方法事件
function onEventMethod(e : JSONObject) {
// console.log(e)
//类型
let type : string = e.getString("type");
//数据
let data : JSONObject = e.getJSONObject("data");
//状态
// let code : number = data.getInteger("code");
// //实际数据
// let resultData : JSONObject = data.getJSONObject("data");
// //错误消息提示
// let message : string = data.getString("message");
switch (type) {
case "stopPreview":
//关闭预览
console.log("关闭预览:" + data.toJSONString())
break
case "startPreview":
//开启预览
console.log("开启预览:" + data.toJSONString())
break
case "switchCamera":
//切换摄像头
console.log("切换摄像头:" + data.toJSONString())
break
case "takePicture":
//拍照
console.log("拍照:" + data.toJSONString())
break
case "startRecording":
//开始录像
console.log("开始录像:" + data.toJSONString())
break
case "stopRecording":
//结束录像
console.log("结束录像:" + data.toJSONString())
break
case "isExposureSupported":
//获取相机是否支持曝光度
console.log("获取相机是否支持曝光度:" + data.toJSONString())
break
case "getExposureRange":
//获取相机是否支持曝光度
console.log("获取相机支持的曝光度:" + data.toJSONString())
break
case "setExposure":
//设置曝光
console.log("设置曝光:" + data.toJSONString())
break
case "getZoomRange":
//获取相机支持的焦距
console.log("获取相机支持的焦距:" + data.toJSONString())
break
case "setZoom":
//设置焦距
console.log("设置焦距:" + data.toJSONString())
break
case "setFlashMode":
//设置闪光灯模式
console.log("设置闪光灯模式:" + data.toJSONString())
break
}
}
</script>
<style lang="scss">
.popup-contaner {
background-color: #FFFFFF;
border-radius: 8px 8px 0 0;
&-title {
padding: 16px;
border-bottom: 1px solid #f2f2f2;
flex-direction: row;
justify-content: center;
align-items: center;
}
&-content {
padding: 16px;
max-height: 500px;
}
}
</style>