Skip to content

相机

免费插件

此插件免费开源,采用 MIT 许可证。

概述

Camera API 提供对设备相机的访问,用于拍照、录像和从相册中选择媒体文件。

安装

shell
composer require nativephp/mobile-camera

使用

PHP (Livewire/Blade)

php
use Native\Mobile\Facades\Camera;

// 拍照
Camera::getPhoto();

// 录像
Camera::recordVideo();

// 设置最大录制时长
Camera::recordVideo(['maxDuration' => 30]);

// 使用流式 API
Camera::recordVideo()
    ->maxDuration(60)
    ->id('my-video-123')
    ->start();

// 从相册选择图片
Camera::pickImages('images', false); // 单张图片
Camera::pickImages('images', true);  // 多张图片
Camera::pickImages('all', true);     // 任意媒体类型

JavaScript (Vue/React/Inertia)

js
import { camera, on, off, Events } from '#nativephp';

// 拍照
await camera.getPhoto();

// 带有用于跟踪的标识符
await camera.getPhoto()
    .id('profile-pic');

// 录像
await camera.recordVideo()
    .maxDuration(60);

// 选择图片
await camera.pickImages()
    .images()
    .multiple()
    .maxItems(5);

事件

PhotoTaken

当使用相机拍照时触发。

php
use Native\Mobile\Attributes\OnNative;
use Native\Mobile\Events\Camera\PhotoTaken;

#[OnNative(PhotoTaken::class)]
public function handlePhotoTaken(string $path)
{
    // 处理拍摄的照片
    $this->processPhoto($path);
}
js
import { on, off, Events } from '#nativephp';
import { ref, onMounted, onUnmounted } from 'vue';

const photoPath = ref('');

const handlePhotoTaken = (payload) => {
    photoPath.value = payload.path;
    processPhoto(payload.path);
};

onMounted(() => {
    on(Events.Camera.PhotoTaken, handlePhotoTaken);
});

onUnmounted(() => {
    off(Events.Camera.PhotoTaken, handlePhotoTaken);
});

VideoRecorded

当视频录制成功完成时触发。

Payload:

  • string $path - 录制视频的文件路径
  • string $mimeType - 视频 MIME 类型(默认:'video/mp4'
  • ?string $id - 如果通过 id() 方法设置,则为可选标识符

VideoCancelled

当用户取消视频录制时触发。

方法

maxDuration(int $seconds)

设置最大录制时长(秒)。

id(string $id)

设置此录制的唯一标识符,用于与事件关联。

event(string $eventClass)

设置录制完成时要分发的自定义事件类。

remember()

将录制器的 ID 存储在会话中以便稍后检索。

start()

显式开始视频录制。

存储位置

照片:

  • Android: 应用缓存目录 {cache}/captured.jpg
  • iOS: Application Support ~/Library/Application Support/Photos/captured.jpg

视频:

  • Android: 应用缓存目录 {cache}/video_{timestamp}.mp4
  • iOS: Application Support ~/Library/Application Support/Videos/captured_video_{timestamp}.mp4

注意事项

  • 权限: 必须在 config/nativephp.php 中启用 camera 权限才能使用相机功能
  • 如果权限被拒绝,相机功能将静默失败
  • 相机权限适用于照片、视频以及二维码/条形码扫描
  • 文件格式:照片为 JPEG,视频为 MP4

基于 NativePHP 官方文档翻译