React native 如何在react native中使用expo摄像头拍摄图像
我是个新来的本地人。我已经创建了一个应用程序。但现在我想从这个应用程序中捕获图像。我从世博会网站上得到了代码,但问题是这个代码只能打开摄像头。我想用那架照相机拍一张照片。所以如果可能的话,请帮助我 这是我的密码React native 如何在react native中使用expo摄像头拍摄图像,react-native,expo,expo-camera,React Native,Expo,Expo Camera,我是个新来的本地人。我已经创建了一个应用程序。但现在我想从这个应用程序中捕获图像。我从世博会网站上得到了代码,但问题是这个代码只能打开摄像头。我想用那架照相机拍一张照片。所以如果可能的话,请帮助我 这是我的密码 import React, { useState, useEffect } from 'react'; import { StyleSheet, Text, View, TouchableOpacity } from 'react-native'; import { Camera } f
import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native';
import { Camera } from 'expo-camera';
import { Ionicons } from '@expo/vector-icons';
export default function App({navigation}) {
const [hasPermission, setHasPermission] = useState(null);
const [type, setType] = useState(Camera.Constants.Type.back);
useEffect(() => {
(async () => {
const { status } = await Camera.requestPermissionsAsync();
setHasPermission(status === 'granted');
})();
}, []);
if (hasPermission === null) {
return <View />;
}
if (hasPermission === false) {
return <Text>No access to camera</Text>;
}
return (
<View style={styles.container}>
<View style={styles.header}>
<Ionicons style={{paddingLeft:20}} name="arrow-back" size={40}
color="black" onPress={() => navigation.navigate("OtherInfo")} />
<Text style={{fontSize:20, paddingLeft: 70, paddingTop: 10}}>Get Image</Text>
</View>
<Camera style={styles.camera} type={type}>
<View style={styles.buttonContainer}>
<TouchableOpacity
style={styles.button}
onPress={() => {
setType(
type === Camera.Constants.Type.back
? Camera.Constants.Type.front
: Camera.Constants.Type.back
);
}}>
<Text style={styles.text}> Flip </Text>
</TouchableOpacity>
</View>
</Camera>
</View>
);
}
const styles = StyleSheet.create({
camera:{
height:500
},
header:{
flexDirection: 'row'
}
});
import React,{useState,useffect}来自“React”;
从“react native”导入{样式表、文本、视图、TouchableOpacity};
从“expo Camera”导入{Camera};
从“@expo/vector icons”导入{Ionicons};
导出默认函数App({navigation}){
const[hasPermission,setHasPermission]=useState(null);
const[type,setType]=useState(Camera.Constants.type.back);
useffect(()=>{
(异步()=>{
const{status}=wait-Camera.requestPermissionsAsync();
setHasPermission(状态==‘已授予’);
})();
}, []);
if(hasPermission==null){
返回;
}
if(hasPermission==false){
不允许进入摄像机;
}
返回(
导航。导航(“其他信息”)}/>
获取图像
{
集合类型(
类型===Camera.Constants.type.back
?摄像头.常数.类型.前部
:Camera.Constants.Type.back
);
}}>
轻弹
);
}
const styles=StyleSheet.create({
摄像机:{
身高:500
},
标题:{
flexDirection:“行”
}
});
这是一个小型应用程序的工作示例,它可以从照相机和Gallary中拍摄照片,并在单击或选择后显示给用户
工作应用程序:
import React,{useState,useffect}来自“React”;
从“react native”导入{样式表、文本、视图、按钮、图像};
从“expo Camera”导入{Camera};
从“世博会图像采集器”导入*作为图像采集器;
导出默认函数Add({navigation}){
const[cameraPermission,setCameraPermission]=useState(null);
const[galleryPermission,setGalleryPermission]=useState(null);
const[camera,setCamera]=使用状态(null);
常量[imageUri,setImageUri]=useState(null);
const[type,setType]=useState(Camera.Constants.type.back);
const permissionfunction=async()=>{
//以下是您如何获得相机许可的方法
const cameraPermission=等待Camera.requestPermissionsAsync();
setCameraPermission(cameraPermission.status===“已授予”);
const imagePermission=wait ImagePicker.getMediaLibraryPermissionsAsync();
日志(imagePermission.status);
setGalleryPermission(imagePermission.status==‘已授予’);
如果(
imagePermission.status!=“已授予”&&
cameraPermission.status!==“已授予”
) {
警报(“需要媒体访问权限”);
}
};
useffect(()=>{
许可函数();
}, []);
const takePicture=async()=>{
如果(照相机){
const data=wait camera.takePictureAsync(空);
log(data.uri);
setImageUri(data.uri);
}
};
const pickImage=async()=>{
让结果=等待ImagePicker.launchImageLibraryAsync({
mediaTypes:ImagePicker.MediaTypeOptions.Images,
允许编辑:对,
方面:[1,1],
质量:1,,
});
控制台日志(结果);
如果(!result.cancelled){
setImageUri(result.uri);
}
};
返回(
设置摄像机(参考)}
style={style.fixedRatio}
类型={type}
比率={'1:1'}
/>
{imageUri&&}
);
}
const styles=StyleSheet.create({
容器:{
弹性:1,
},
摄影机容器:{
弹性:1,
flexDirection:'行',
},
固定比率:{
弹性:1,
方面:1,
},
按钮:{
弹性系数:0.1,
填充:10,
alignSelf:“柔性端”,
对齐项目:“居中”,
},
});
谢谢兄弟,非常感谢你还有更多问题。我可以从gallery images中删除裁剪图像选项吗?我的意思是,我可以从gallery中选择完整图像而不进行裁剪吗?您可以,只需从pickImage
函数中删除纵横比选项。只需创建一个存储图像数组的状态,然后在运行pickImage时,将新选择的图像添加到该数组中(状态)。简单。用升级的代码发布答案。一定要退房。