更新记录

1.1.0(2026-09-05)

  • 拍照:支持前置/后置摄像头切换,JPEG/PNG 导出
  • 图片裁剪:矩形/圆角矩形/圆形裁剪框,自定义比例,手势拖拽缩放
  • 水印:实时时间水印、自定义文字/图片水印
  • 闪光灯:torch 常亮模式(Android Chrome / 小程序支持,iOS Safari )
  • 手势缩放:双指 pinch-to-zoom,硬件缩放优先,CSS 缩放
  • 点击对焦:单指点击触发对焦动画,H5 端支持手动指定对焦位置
  • 横竖屏切换:自动检测屏幕旋转,UI 等比缩放适配横屏
  • 加载提示:相机启动时显示 loading 动画,支持自定义颜色/尺寸/文字
  • 相册选图:从系统相册选择图片(可进入裁剪流程)
  • 内存管理:Object URL 自动释放,避免内存泄漏

平台兼容性

uni-app(5.0)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

ux-camera 跨平台相机组件

跨平台相机组件,支持拍照、图片裁剪、水印、闪光灯、手势缩放、点击对焦、横竖屏切换,兼容 H5 / APP / 小程序,Vue2 / Vue3 双版本支持。

依赖

  • ux-svg-icon 模块(SVG 图标)

平台兼容性

平台 支持 实现方式
H5 (Chrome) getUserMedia + Canvas
H5 (Safari iOS) getUserMedia(闪光灯不支持)
APP (Android) live-pusher
APP (iOS) live-pusher
微信小程序 camera 组件
支付宝/百度/头条/QQ 小程序 camera 组件
Vue 2 条件编译兼容
Vue 3 条件编译兼容

功能特性

  • 拍照:支持前置/后置摄像头切换,JPEG/PNG 导出
  • 图片裁剪:矩形/圆角矩形/圆形裁剪框,自定义比例,手势拖拽缩放
  • 水印:实时时间水印、自定义文字/图片水印
  • 闪光灯:torch 常亮模式(Android Chrome / 小程序支持,iOS Safari )
  • 手势缩放:双指 pinch-to-zoom,硬件缩放优先,CSS 缩放
  • 点击对焦:单指点击触发对焦动画,H5 端支持手动指定对焦位置
  • 横竖屏切换:自动检测屏幕旋转,UI 等比缩放适配横屏
  • 加载提示:相机启动时显示 loading 动画,支持自定义颜色/尺寸/文字
  • 相册选图:从系统相册选择图片(可进入裁剪流程)
  • 内存管理:Object URL 自动释放,避免内存泄漏

快速使用

<template>
  <ux-camera
    title="拍照"
    facing="environment"
    :enable-zoom="true"
    :enable-autofocus="true"
    :enable-orientation="true"
    @ready="onReady"
    @photo="onPhoto"
    @error="onError"
    @back="onBack"
  />
</template>

<script>
import UxCamera from '@/uni_modules/ux-camera/components/ux-camera/ux-camera.vue'
//#ifdef APP-PLUS
import UxCamera from '@/uni_modules/ux-camera/components/ux-camera/ux-camera.nvue'
// #endif
export default {
  components: { UxCamera },
  methods: {
    onReady(e) { console.log('相机就绪', e) },
    onPhoto(result) {
      // result.tempFilePath  图片路径
      // result.width / result.height  图片尺寸
      // result.blob  Blob 对象(H5 端,可用于上传)
    },
    onError(msg) { uni.showToast({ title: msg, icon: 'none' }) },
    onBack() { uni.navigateBack() },
  },
}
</script>

Props

属性 类型 默认值 说明
title String '拍照' 顶部标题
hintText String '' 底部提示文字
facing String 'environment' 摄像头方向:'environment' 后置 / 'user' 前置
resolution String 'high' 分辨率:'low' / 'medium' / 'high'
watermark Object null 水印配置
watermarkEnabled Boolean false 是否启用水印
enableCrop Boolean false 是否开启拍照后裁剪
cropConfig Object {} 裁剪配置(透传给裁剪组件)
enableZoom Boolean true 是否启用手势缩放
enableAutofocus Boolean true 是否启用点击对焦
zoomRange Array [1, 4] 缩放范围 [min, max]
enableOrientation Boolean true 是否启用横竖屏切换
loadingStyle Object {} 加载层样式配置

cropConfig 配置项

属性 类型 默认值 说明
cropShape String 'rect' 裁剪框形状:'rect' / 'round-rect' / 'circle'
aspectRatio Number 0 宽高比:0 自由 / 1 正方 / 1.585 身份证 / 4/3 / 16/9
cropWidth Number 0 固定裁剪框宽(优先级高于 aspectRatio)
cropHeight Number 0 固定裁剪框高
minCropWidth Number 100 最小裁剪框宽
minCropHeight Number 100 最小裁剪框高
roundRadius Number 0 round-rect 圆角半径
minScale Number 0.5 图片最小缩放倍数
maxScale Number 5 图片最大缩放倍数
maskColor String 'rgba(0,0,0,0.6)' 遮罩颜色
quality Number 0.92 JPEG 压缩质量 0~1
fileType String 'jpg' 导出格式:'jpg' / 'png'
exportOriginalResolution Boolean false 是否按原图像素导出
canResizeFrame Boolean true 是否允许调整裁剪框大小

loadingStyle 配置项

属性 类型 默认值 说明
loadingColor String '#3be8a5' spinner 颜色
loadingSize Number 80 spinner 尺寸(rpx)
loadingText String '正在启动相机...' 提示文字
loadingTextColor String 'rgba(255,255,255,0.7)' 文字颜色
loadingBg String 'rgba(0,0,0,0.85)' 遮罩背景色

Events

事件名 参数 说明
ready { width, height } 相机就绪
photo { tempFilePath, width, height, blob?, hasWatermark } 拍照完成(或裁剪完成)
error String 错误信息
back - 点击返回按钮
flash-change 'torch' / 'off' 闪光灯状态变化
switch-camera 'environment' / 'user' 摄像头切换
orientation-change { orientation, isLandscape, screenWidth, screenHeight } 屏幕方向变化

Slots

插槽名 说明
default 取景框覆盖层(身份证框、银行卡框等)
hint 底部提示区域自定义内容

组件方法(通过 ref 调用)

方法 说明
openCamera() 打开相机
closeCamera() 关闭相机
takePhoto() 拍照
toggleFlash() 切换闪光灯

目录结构

uni_modules/ux-camera/
├── components/ux-camera/
│   ├── ux-camera.vue           # 入口组件
│   ├── camera/
│   │   ├── ux-camera-h5.vue    # H5 平台实现
│   │   ├── ux-camera-mp.vue    # 小程序平台实现
│   │   └── ux-camera-app.vue   # APP 平台实现
│   ├── crop/
│   │   ├── ux-image-cropper.vue # 图片裁剪组件
│   │   └── crop-config.js       # 裁剪配置常量
│   ├── ux-popup/
│   │   ├── ux-popup.vue                 # 弹窗组件
│   ├── ux-svg-icon/
│   │   ├── ux-svg-icon.vue          # svg icon 组件
│   └── utils/
│       └── index.js             # H5 工具方法(压缩、Base64、ObjectURL)
├── package.json
├── changelog.md
└── readme.md

隐私声明

  • 组件运行时需请求摄像头权限
  • 拍摄的照片数据仅在本地处理,不上传任何服务器
  • 不收集、不存储、不传输任何用户隐私数据

隐私、权限声明

1. 本插件需要申请的系统权限列表:

摄像头权限(getUserMedia / camera / live-pusher);相册写入权限(保存图片到相册)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

组件在运行时会请求摄像头权限,拍摄的照片数据仅在本地处理,不上传任何服务器

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。