更新记录
1.0.0(2026-05-09)
安卓原生相机设备拍照,安卓USB摄像外接设备预览和拍照,返回base64图片
平台兼容性
uni-app(5.07)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | Android | Android插件版本 | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | - | 5.0 | 1.0.0 | × | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
安卓原生相机设备拍照,安卓USB摄像外接设备预览和拍照,返回base64图片
需要打包自定调试包测试才能使用
由于使用的是 Camera1的方法可能会出现警告,无视即可 warning: 'class Camera : Any' is deprecated. Deprecated in Java.
完整页面使用方法:
vue2的需要自己去设置一下调用方法,案例写的是vue3的方式
<template>
<view>
<button @click="Camera1List">获取当前摄像头设备ID列表</button>
<button @click="Camera1Open">打开摄像头设备</button>
<button @click="Camera1Picture">摄像头设备拍照</button>
<button @click="Camera1Closed">关闭摄像头设备</button>
<button @click="Camera1Hide(false)">隐藏摄像头设备</button>
<button @click="Camera1Hide(true)">显示摄像头设备</button>
<view class="sssAD"></view>
<image class="sssimg" :src="img" mode="aspectFill"></image>
</view>
</template>
<script setup>
import {
onShow,
onReady,
onReachBottom,
onPullDownRefresh,
onShareAppMessage
}
from '@dcloudio/uni-app';
import {
getCurrentInstance,
ref,
reactive,
inject,
computed,
onMounted
} from 'vue';
let img = ref(``);
//插件调用方法
import {
UTSCamera1List,
UTSCamera1Open,
UTSCamera1Picture,
UTSCamera1Closed,
UTSCamera1Hide
} from "@/uni_modules/mushan-natcamera";
/*
获取当前相机设备列表总数
返回参数 {"data":2,"msg":"ok"},msg为ok是获取成功,data是获取到当前识别到的相机设备总数
比如:
如果data返回2 相机id分别就是(0,1)
如果data返回3 相机id分别就是(0,1,2)
以此类推 那个id对应那个相机,需要自己打开试一下
*/
function Camera1List(){
UTSCamera1List((res)=>{
let resData = JSON.parse(res)
console.log(resData);
})
}
/*
打开相机设备
返回参数 {"msg":"ok"},msg为ok是打开成功
以下为案例式样
cameraId 通过UTSCamera1List 获取总数后对应的id,通常都是从0开始;
widthView 预览显示的宽,按设备整体宽度百分比1为设备的宽。0.5为一半宽
heightView 预览显示的高,按设备整体高度百分比1为设备的高。0.5为一半高
topMargin 预览与顶部的距离,1为整个设备的高距离,0.5为一半
leftMargin 预览与左边的距离,1为整个设备的宽距离,0.5为一半
cameraRotate 预览画面旋转角度通常都是 0 90 180 270 360
circleShow 预览画面是否按圆形显示 false,true
*/
function Camera1Open(){
uni.getSystemInfo({
success: function(res) {
console.log(res);
let windowWidth = res.windowWidth
let windowHeight = res.windowHeight
const query = uni.createSelectorQuery();
query.select('.sssAD').boundingClientRect().exec((ret) => {
console.log(ret);
let vWidth = (ret[0].width/windowWidth).toFixed(2)
let vHeight = (ret[0].height/windowHeight).toFixed(2)
let vTop = (ret[0].top/windowHeight).toFixed(2)
let vLeft = (ret[0].left/windowWidth).toFixed(2)
let parame = {
cameraId:Number(0),
cameraRotate:Number(0),
widthView:Number(vWidth),
heightView:Number(vHeight),
topMargin:Number(vTop),
leftMargin:Number(vLeft),
circleShow:false,
}
UTSCamera1Open(parame,(res)=>{
let resData = JSON.parse(res)
console.log(resData);
if(resData.msg == 'ok'){
}else if(resData.msg == '用户拒绝了部分权限'){
Camera1Open();
}
})
})
}
});
}
/*
相机设备拍照,返回base64
返回参数 {"msg":"ok"},msg为ok是拍照成功
cameraId 打开的摄像头对应的id,通常都是从0开始;
imgQuality 拍照的图片质量 0-100
imgWidth 拍照的图片宽
imgHeight 拍照的图片高
imgRotate 拍照的图片旋转角度
imgMirror 拍照的图片是否镜像翻转,true 翻转,false 不翻转
*/
function Camera1Picture(){
let parame = {
cameraId:Number(0),
imgQuality:Number(70),
imgWidth:Number(640),
imgHeight:Number(480),
imgRotate:Number(90),
imgMirror:true,
}
UTSCamera1Picture(parame,(res)=>{
let resData = JSON.parse(res)
if(resData.msg == 'ok'){
img.value = filterBase64(resData.data);
}
})
}
function filterBase64(codeImages) {
return codeImages.replace(/[\r\n]/g, "");
}
/*
相机设备预览关闭
返回参数 {"msg":"ok"},msg为ok关闭成功
cameraId 打开的摄像头对应的id,通常都是从0开始;
*/
function Camera1Closed(){
let parame = {
cameraId:Number(0),
}
UTSCamera1Closed(parame, (res) => {
let resData = JSON.parse(res);
if (resData.msg === 'ok') {
}
});
}
/*
相机设备预览隐藏
返回参数 {"msg":"ok"},msg为ok
cameraId 打开的摄像头对应的id,通常都是从0开始;
cameraShow true 显示,false隐藏
*/
function Camera1Hide(type){
let parame = {
cameraId:Number(0),
cameraShow:type,
}
UTSCamera1Hide(parame,(res) => {
let resData = JSON.parse(res);
if (resData.msg === 'ok') {
}
});
}
</script>
<style lang="scss" scoped>
.sssAD{
width: 300rpx;
height: 300rpx;
background-color: red;
float: left;
}
.sssimg{
width: 300rpx;
height: 300rpx;
background-color: #cccccc;
float: left;
}
</style>

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 911
赞赏 0
下载 11891309
赞赏 1914
赞赏
京公网安备:11010802035340号