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

关注微信公众号可联系作者
插件地址
https://ext.dcloud.net.cn/plugin?id=29607
权限
- 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-waterCamera"js
import * as module from "@/uni_modules/leven-waterCamera"组件用法
在使用插件的地方引入以下代码:
vue
<leven-waterCamera ref="refCamera" style="flex:1; height: 500px;" :config="config" @onError="onError"
@onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-waterCamera>vue
<leven-waterCamera ref="refLevenCamera" style="flex:1; height: 500px;" :configX="config" @onError="onError"
@onEventMethod="onEventMethod">
</leven-waterCamera>
//组件的引用
const refCamera = ref<LevenUtsWaterCameraElement | 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>
import * as module from "@/uni_modules/leven-waterCamera"
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'
]
},
complete: (res) => {
console.log(res)
}
})
},
//检查所有文件访问权限
checkAllFilesPermission() {
module.checkAllFilesPermission({
complete: (res) => {
console.log(res)
}
})
},
//跳转到所有文件访问权限页面
toAllFilesPermissionPage() {
module.toAllFilesPermissionPage({
complete: (res) => {
console.log(res)
}
})
}
}
}
</script>
<style>
</style>vue
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<rice-cell-group border>
<rice-cell title="静默拍照录像模式" arrow clickable @click="toPage('noPreview')"></rice-cell>
<rice-cell title="预览模式" arrow clickable @click="toPage('preview')"></rice-cell>
</rice-cell-group>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script setup lang="uts">
import * as module from "@/uni_modules/leven-waterCamera"
import { LevenResult, LevenOptions } from "@/uni_modules/leven-waterCamera"
function toPage(type : string) {
switch (type) {
case "noPreview":
uni.navigateTo({
url: "/pages/waterCamera/noPreview"
})
break
case "preview":
uni.navigateTo({
url: "/pages/waterCamera/preview"
})
break
}
}
//显示消息
function showMessage(message : string) {
uni.showToast({
title: message,
icon: "none"
})
}
//跳转到所有文件访问权限页面
function toAllFilesPermissionPage() {
module.toAllFilesPermissionPage({
complete: (res : LevenResult) => {
if (res.code == 0) {
let data = res.data;
let status : boolean = data.getBoolean("status")!
if (!status) {
showMessage("所有文件访问权限未打开")
} else {
showMessage("权限授权完成,欢迎使用")
}
} else {
showMessage("跳转到所有文件访问权限页面失败")
}
}
} as LevenOptions)
}
//检测是否有所有文件访问权限
function checkAllFilesPermission() {
module.checkAllFilesPermission({
complete: (res : LevenResult) => {
if (res.code == 0) {
let data = res.data;
let status : boolean = data.getBoolean("status")!
if (!status) {
toAllFilesPermissionPage();
} else {
showMessage("权限授权完成,欢迎使用")
}
} else {
showMessage("查询文件权限失败")
}
}
} as LevenOptions)
}
//申请权限
function requestPermissions() {
module.requestPermissions({
params: {
permissions: [
'android.permission.READ_EXTERNAL_STORAGE',
'android.permission.WRITE_EXTERNAL_STORAGE',
'android.permission.RECORD_AUDIO',
'android.permission.CAMERA'
]
},
complete: (res : LevenResult) => {
console.log(res)
if (res.code == 0) {
checkAllFilesPermission()
} else {
showMessage("权限申请未通过")
}
}
} as LevenOptions)
}
//页面加载
onMounted(() => {
//申请权限
requestPermissions();
})
</script>
<style>
</style>组件页面
预览模式
vue
<template>
<view>
<view style="flex: 1; height: 300px;">
<leven-waterCamera ref="refCamera" style="flex:1; height: 300px;" :config="config" @onError="onError"
@onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-waterCamera>
</view>
<button type="primary" @click="addWater">添加水印</button>
<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: "FHD",
//默认水印配置
water: [{
//水印文本内容
text: "这是一条纯文本水印",
//水印颜色
color: "#FFFFFF",
//文本大小
textSize: 30,
//文本样式
typeFace: "BOLD_ITALIC",
//透明度
alpha: 90,
//水印上边距
topMargin: 40,
//水印下边距
bottomMargin: 40,
//水印左边距
leftMargin: 40,
//水印右边距
rightMargin: 40,
//水印位置
position: 0
}, {
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 1
}]
},
//曝光度
exposure: 0,
//焦距
zoom: 1.0,
}
},
methods: {
//添加水印
addWater() {
let params = this.config.water;
params.push({
//水印文本内容
text: "图片加水印",
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 2
})
this.$refs.refCamera.addWater({
water: params
});
},
//设置闪光点模式
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();
},
//切换摄像头
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: 300px; position: relative;">
<leven-waterCamera ref="refCamera" style="flex:1; height: 300px; margin-bottom: 20px;" :configX="config"
@onError="onError" @onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-waterCamera>
</view>
<leven-ui-card title="组件方法">
<button type="primary" @click="addWater">添加水印</button>
<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 setup lang="uts">
import JSONObject from 'com.alibaba.fastjson.JSONObject'
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: "FHD",
//默认水印配置
water: [{
//水印文本内容
text: "这是一条纯文本水印",
//水印颜色
color: "#FFFFFF",
//文本大小
textSize: 30,
//文本样式
typeFace: "BOLD_ITALIC",
//透明度
alpha: 90,
//水印上边距
topMargin: 40,
//水印下边距
bottomMargin: 40,
//水印左边距
leftMargin: 40,
//水印右边距
rightMargin: 40,
//水印位置
position: 0
}, {
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 1
}]
})
//闪光灯模式
const flashModel = ref(0)
const zoom = ref(1.0)
const exposure = ref(0)
const refCamera = ref<LevenUtsWaterCameraElement | null>(null)
//结束录像
function stopRecording() {
refCamera.value?.stopRecording();
}
//开始录像
function startRecording() {
refCamera.value?.startRecording();
}
//拍照
function takePicture() {
refCamera.value?.takePicture();
}
//切换摄像头
function switchCamera() {
refCamera.value?.switchCamera();
}
//开启预览
function startPreview() {
refCamera.value?.startPreview();
}
//关闭预览
function stopPreview() {
refCamera.value?.stopPreview();
}
//获取相机是否支持曝光度
function isExposureSupported() {
refCamera.value?.isExposureSupported();
}
//设置曝光
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
refCamera.value?.setExposure(params);
}
//获取相机支持的曝光度
function getExposureRange() {
refCamera.value?.getExposureRange();
}
//设置焦距
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
refCamera.value?.setZoom(params);
}
//获取相机支持的焦距
function getZoomRange() {
refCamera.value?.getZoomRange();
}
//设置闪光点模式
function setFlashMode() {
flashModel.value++;
if (flashModel.value > 2) {
flashModel.value = 0;
}
let options = {
flashMode: flashModel.value
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refCamera.value?.setFlashMode(params);
}
function addWater() {
let options = {
water: [{
//水印文本内容
text: "这是一条纯文本水印",
//水印颜色
color: "#FFFFFF",
//文本大小
textSize: 30,
//文本样式
typeFace: "BOLD_ITALIC",
//透明度
alpha: 90,
//水印上边距
topMargin: 40,
//水印下边距
bottomMargin: 40,
//水印左边距
leftMargin: 40,
//水印右边距
rightMargin: 40,
//水印位置
position: 0
}, {
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 1
}, {
//水印文本内容
text: "图片加文本",
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 2
}]
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refCamera.value?.addWater(params);
}
//错误事件
function onError(e : JSONObject) {
console.log("onError:" + JSON.stringify(e))
}
//其他事件
function onEvent(e : JSONObject) {
console.log("onEvent:" + JSON.stringify(e))
}
//方法事件
function onEventMethod(e : JSONObject) {
console.log("onEventMethod:" + JSON.stringify(e))
}
</script>
<style>
</style>静默模式
vue
<template>
<view>
<view>
<leven-waterCamera ref="refCamera" :config="config" @onError="onError" @onEvent="onEvent"
@onEventMethod="onEventMethod">
</leven-waterCamera>
</view>
<button type="primary" @click="addWater">添加水印</button>
<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: "FHD",
//是否是静默模式
isSilence: true,
//默认水印配置
water: [{
//水印文本内容
text: "这是一条纯文本水印",
//水印颜色
color: "#FFFFFF",
//文本大小
textSize: 30,
//文本样式
typeFace: "BOLD_ITALIC",
//透明度
alpha: 90,
//水印上边距
topMargin: 40,
//水印下边距
bottomMargin: 40,
//水印左边距
leftMargin: 40,
//水印右边距
rightMargin: 40,
//水印位置
position: 0
}, {
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 1
}]
},
//曝光度
exposure: 0,
//焦距
zoom: 1.0,
}
},
methods: {
//添加水印
addWater() {
let params = this.config.water;
params.push({
//水印文本内容
text: "图片加水印",
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 2
})
this.$refs.refCamera.addWater({
water: params
});
},
//设置闪光点模式
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();
},
//切换摄像头
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>
<leven-waterCamera ref="refCamera" :configX="config" @onError="onError" @onEvent="onEvent"
@onEventMethod="onEventMethod">
</leven-waterCamera>
</view>
<leven-ui-card title="组件方法">
<button type="primary" @click="addWater">添加水印</button>
<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 setup lang="uts">
import JSONObject from 'com.alibaba.fastjson.JSONObject'
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: "FHD",
//是否是静默模式
isSilence: true,
//默认水印配置
water: [{
//水印文本内容
text: "这是一条纯文本水印",
//水印颜色
color: "#FFFFFF",
//文本大小
textSize: 30,
//文本样式
typeFace: "BOLD_ITALIC",
//透明度
alpha: 90,
//水印上边距
topMargin: 40,
//水印下边距
bottomMargin: 40,
//水印左边距
leftMargin: 40,
//水印右边距
rightMargin: 40,
//水印位置
position: 0
}, {
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 1
}]
})
//闪光灯模式
const flashModel = ref(0)
const zoom = ref(1.0)
const exposure = ref(0)
const refCamera = ref<LevenUtsWaterCameraElement | null>(null)
//结束录像
function stopRecording() {
refCamera.value?.stopRecording();
}
//开始录像
function startRecording() {
refCamera.value?.startRecording();
}
//拍照
function takePicture() {
refCamera.value?.takePicture();
}
//切换摄像头
function switchCamera() {
refCamera.value?.switchCamera();
}
//开启预览
function startPreview() {
refCamera.value?.startPreview();
}
//关闭预览
function stopPreview() {
refCamera.value?.stopPreview();
}
//获取相机是否支持曝光度
function isExposureSupported() {
refCamera.value?.isExposureSupported();
}
//设置曝光
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
refCamera.value?.setExposure(params);
}
//获取相机支持的曝光度
function getExposureRange() {
refCamera.value?.getExposureRange();
}
//设置焦距
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
refCamera.value?.setZoom(params);
}
//获取相机支持的焦距
function getZoomRange() {
refCamera.value?.getZoomRange();
}
//设置闪光点模式
function setFlashMode() {
flashModel.value++;
if (flashModel.value > 2) {
flashModel.value = 0;
}
let options = {
flashMode: flashModel.value
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refCamera.value?.setFlashMode(params);
}
function addWater() {
let options = {
water: [{
//水印文本内容
text: "这是一条纯文本水印",
//水印颜色
color: "#FFFFFF",
//文本大小
textSize: 30,
//文本样式
typeFace: "BOLD_ITALIC",
//透明度
alpha: 90,
//水印上边距
topMargin: 40,
//水印下边距
bottomMargin: 40,
//水印左边距
leftMargin: 40,
//水印右边距
rightMargin: 40,
//水印位置
position: 0
}, {
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 1
}, {
//水印文本内容
text: "图片加文本",
//水印图标,如果是静态资源需放置到drawable目录下,支持本地图片绝对路径
icon: "icon",
//水印位置
position: 2
}]
};
let params : JSONObject = JSONObject.parse(JSON.stringify(options)) as JSONObject
refCamera.value?.addWater(params);
}
//错误事件
function onError(e : JSONObject) {
console.log("onError:" + JSON.stringify(e))
}
//其他事件
function onEvent(e : JSONObject) {
console.log("onEvent:" + JSON.stringify(e))
}
//方法事件
function onEventMethod(e : JSONObject) {
console.log("onEventMethod:" + JSON.stringify(e))
}
</script>
<style>
</style>