使用相机拍照
现在进入有趣的部分——使用 Capacitor 相机 API 添加设备相机拍照功能。我们将从 Web 端开始构建,然后稍作调整使其在移动端(iOS 和 Android)也能工作。
照片画廊组合式函数
我们将创建一个独立的组合式方法,结合 Vue 组合式 API 来管理画廊中的照片。
在 src/composables/usePhotoGallery.ts 创建新文件并打开。
接下来,定义一个新的方法 usePhotoGallery(),该方法将包 含拍摄设备照片并保存到文件系统的核心逻辑。让我们先从打开设备相机开始。
import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
export const usePhotoGallery = () => {
const addNewToGallery = async () => {
// 拍照
const capturedPhoto = await Camera.getPhoto({
resultType: CameraResultType.Uri,
source: CameraSource.Camera,
quality: 100,
});
};
return {
addNewToGallery,
};
};
注意这里的巧妙之处:没有平台特定的代码(Web、iOS 或 Android)!Capacitor 相机插件为我们抽象了这些细节,只需一个方法调用——Camera.getPhoto()——就能打开设备相机并允许我们拍照。
接下来,在 Tab2Page.vue 中导入 usePhotoGallery() 方法,并 通过解构调用其 addNewToGallery() 方法。
<template>
<ion-page>
<ion-header>
<ion-toolbar>
<ion-title>照片画廊</ion-title>
</ion-toolbar>
</ion-header>
<ion-content :fullscreen="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title size="large">照片画廊</ion-title>
</ion-toolbar>
</ion-header>
<ion-fab vertical="bottom" horizontal="center" slot="fixed">
<!-- 变更:为浮动操作按钮 添加点击事件监听器 -->
<ion-fab-button @click="addNewToGallery()">
<ion-icon :icon="camera"></ion-icon>
</ion-fab-button>
</ion-fab>
</ion-content>
</ion-page>
</template>
<script setup lang="ts">
import { camera } from 'ionicons/icons';
import { IonPage, IonHeader, IonFab, IonFabButton, IonIcon, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
// 变更:添加 `usePhotoGallery` 导入
import { usePhotoGallery } from '@/composables/usePhotoGallery';
// 变更:从 `usePhotoGallery()` 解构 `addNewToGallery`
const { addNewToGallery } = usePhotoGallery();
</script>
如果尚未运行,请通过运行 ionic serve 在浏览器中重启开发服务器。在照片画廊标签页,点击相机按钮。如果你的电脑有摄像头,会出现一个模态窗口。拍张自拍照吧!