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时,将新选择的图像添加到该数组中(状态)。简单。用升级的代码发布答案。一定要退房。