React Native调用摄像头拍照

react-native-camera 是一个第三方的开源库,我们可以通过它来调用设备的摄像头,从而实现拍照、或者录像功能。
react-native-camera 功能强大,我们可以选择使用哪个摄像头、是拍照还是录像、是否录制声音、是否开启闪光灯、视图比例、拍摄质量、拍摄方向、触摸功能、条形码/二维码扫描等等。

npm介绍:https://www.npmjs.com/package/react-native-camera

npm下载

> npm install react-native-camera @latest  --save

安装依赖库

> react-native link react-native-camera

在AndroidManifest.xml文件中添加权限

<!-- 相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />

<!-- 录像相关权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

ios环境配置

Xcode打开项目的iOS,找到Info.plist文件打开,添加如下权限

  • Privacy - Camera Usage Description
  • Privacy - Microphone Usage Description
  • Privacy - Photo Library Usage Description
  • Privacy - Photo Library Additions Usage Description

打开Info.plist添加如下代码:

示例代码

import  React , {  Component  } from  'react' ;
import  {
   AppRegistry ,
   Dimensions ,
   StyleSheet ,
   Text ,
   TouchableHighlight ,
   View
} from  'react-native' ;
import  Camera  from  'react-native-camera' ;

class  App  extends  Component  {
   //构造函数
   constructor(props) {
       super (props);
       this.state = {
             cameraType:  Camera .constants. Type .back
       };
   }

   //渲染
   render() {
     return  (
       < View  style={styles.container}>
         < Camera
           ref={(cam) => {
             this.camera = cam;
           }}
           style={styles.preview}
           type={this.state.cameraType}
           aspect={ Camera .constants. Aspect .fill}>
           < Text  style={styles.button} onPress={this.switchCamera.bind(this)}>[切换摄像头]</ Text >
           < Text  style={styles.button} onPress={this.takePicture.bind(this)}>[拍照]</ Text >
         </ Camera >
       </ View >
     );
   }

   //切换前后摄像头
   switchCamera() {
     var  state = this.state;
     if (state.cameraType ===  Camera .constants. Type .back) {
       state.cameraType =  Camera .constants. Type .front;
     } else {
       state.cameraType =  Camera .constants. Type .back;
     }
     this.setState(state);
   }

   //拍摄照片
   takePicture() {
     this.camera.capture()
       .then(function(data){
         alert( "拍照成功!图片保存地址:\n" +data.path)
       })
       .catch(err => console.error(err));
   }
}

const styles =  StyleSheet .create({
   container: {
     flex: 1,
     flexDirection:  'row' ,
   },
   preview: {
     flex: 1,
     justifyContent:  'space-between' ,
     alignItems:  'flex-end' ,
     flexDirection:  'row' ,
   },
   toolBar: {
     width: 200,
     margin: 40,
     backgroundColor:  '#000000' ,
     justifyContent:  'space-between' ,

   },
   button: {
     flex: 0,
     backgroundColor:  '#fff' ,
     borderRadius: 5,
     color:  '#000' ,
     padding: 10,
     margin: 40,
   }
});

AppRegistry .registerComponent( 'ReactDemo' , () =>  App );

参考链接:

PS:写作不易,如要转裁,请标明转载出处。
%{ comment.page.total }条评论

猜你想看

微信小程序:前端开发宝典

最近文章
工具操作
  • 内容截图
  • 全屏
登录
注册
回顶部