Ga naar hoofdinhoud

Camera

expo-camera is een package die je kan gebruiken om foto"s te maken met je app. Met Camera kan je ook foto"s nemen en filmpjes maken.

Installatie

Om expo-camera te gebruiken moeten we eerst de expo-camera library installeren:

npx expo install expo-camera

Gebruik

Permissie vragen

Het is belangrijk om te weten dat je de Camera component pas kan gebruiken als de gebruiker hiervoor toestemming heeft gegeven. Dit kan je doen met de requestPermission functie afkomstig uit de useCameraPermissions hook.

import React, { useState } from "react";
import { Camera, CameraType } from "expo-camera";
import { Button, StyleSheet, Text, TouchableOpacity, View } from "react-native";

const App = () => {
const [permission, requestPermission] = Camera.useCameraPermissions();

if (!permission) {
// De permissies zijn nog aan het laden
return <View/>
}

if (!permission.granted) {
return (
<View style={styles.container}>
<Text>You don"t have permission to use the camera</Text>
<Button title="Toestemming vragen" onPress={requestPermission} />
</View>
);
}

return (
<View>
<Text>You have permission to use the camera</Text>
</View>
)
}

export default App;

Camera gebruiken

Eenmaal je de permissie hebt gekregen kan je de Camera component gebruiken.

import React, { useState } from "react";
import { Camera, CameraType } from "expo-camera";
import { Button, StyleSheet, Text, TouchableOpacity, View } from "react-native";

const App = () => {
const [permission, requestPermission] = Camera.useCameraPermissions();

if (!permission) {
// De permissies zijn nog aan het laden
return <View/>
}

if (!permission.granted) {
return (
<View style={styles.container}>
<Text>You don"t have permission to use the camera</Text>
<Button title="Toestemming vragen" onPress={requestPermission} />
</View>
);
}

return (
<View style={{alignItems: "stretch"}}>
<Camera style={{flex: 1}} type={CameraType.front}/>
</View>
)
}

export default App;

Foto maken

Om een foto te maken kan je de takePictureAsync functie gebruiken. We hebben hier wel een referentie nodig naar het camera object. Dit kan je doen door de useRef hook te gebruiken. Deze biedt je dan een object aan waarmee je de camera kan aanroepen.

De referentie naar de camera kan je als volgt verkrijgen:

const cameraRef = React.useRef<Camera>(null);

Je moet dan ook nog het Camera component aanpassen zodat het de cameraRef gebruikt:

<Camera ref={cameraRef}>

daarna kunnen we de takePictureAsync functie aanroepen op deze cameraRef. Deze functie geeft ons een Photo object terug. Dit object bevat de uri van de foto.

import React, { useState } from "react";
import { Camera, CameraType } from "expo-camera";
import { Button, StyleSheet, Text, TouchableOpacity, View } from "react-native";

const App = () => {
const [permission, requestPermission] = Camera.useCameraPermissions();
const cameraRef = React.useRef<Camera>(null);
const [photo, setPhoto] = useState<string | null>(null);

const takePicture = () => {
if (cameraRef.current) {
cameraRef.current.takePictureAsync().then((photo) => {
setPhoto(photo.uri);
});
}
}

if (!permission) {
// De permissies zijn nog aan het laden
return <View/>
}

if (!permission.granted) {
return (
<View style={styles.container}>
<Text>You don"t have permission to use the camera</Text>
<Button title="Toestemming vragen" onPress={requestPermission} />
</View>
);
}

return (
<View style={{alignItems: "stretch", flex: 1}}>
<Camera ref={cameraRef} style={{flex: 1}} type={CameraType.front}/>
{photo ? <Image source={{uri: photo}} style={{flex: 1}} /> : <View style={{flex:1}} />}
<Button title="Take picture" onPress={takePicture} />
</View>
)
}

export default App;

Meer informatie

Voor meer informatie over de expo-camera package kan je de documentatie raadplegen.