@tuofeng/react-native-image-picker
v0.0.51
Published
Image Picker
Downloads
8
Maintainers
Readme
react-native-android-image-picker
Android照片选取器,支持多张照片选取(支持选择图片的时候拍照),支持直接启动拍照。用户可以方便的看到选择顺序 1、结果演示
- 截图
- 动画演示
2、文件夹说明
- Android文件夹,存放的是多图选择器的Android端代码
- 注:根据产品需求可以对/Android/src/main/res/drawable-xxhdpi下的图片资源进行替换:返回箭头(btn_back.png)、相机图标(default_camera.png)、默认图片(default_image.png)
- Example文件夹,是Android 的demo示例
- images文件夹,存放的是示例演示截图
3、怎么使用?
第一步:运行环境
```省略```
第二步:更新 Gradle Settings
// file:/settings.gradle
...
include ':imagepicker'
project(':imagepicker').projectDir = new File(settingsDir, 'xxxxx/Android')
第三步: 更新 app Gradle
// file:/app/build.gradle
...
dependencies {
...
compile project(':imagepicker')
}
第四步:添加Package
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
...,
new ImagePickerPackage()
);
第五步:在宿主程序中配置Activity
// file:/app/src/main/AndroidManifest.xml
<activity android:name="cn.tuofeng.imagepicker.view.MultiImageSelectorActivity"/>
第六步:在JavaScript中使用
...
var ImagePickerManager = NativeModules.ImagePickerManager;
class choosePhoto extends React.Component {
//返回值保存
state = {
avatarSource: null
};
//选择照片库
selectPhotoFromLibrary() {
//参数设置
const options = {
showCamera:true, //是否显示照相机
maxNumOfSelect: 5, // 照片最大选取数
quality: 1, // 照片压缩率,按照像素压缩
maxWidth: 500, // 最大尺寸宽度
maxHeight: 500, // 最大尺寸高度
listNavigationBarOptions:{ // 缩略图页面,上导航条的设置项
buttonColor:'#5877BF',//完成按钮的背景颜色
indicatorColor:'#5877BF',//数字指示器的背景颜色
backgroundColor:'#3F59AF', // 上导航栏的背景颜色,默认为纯黑色
titleColor:'#FFFFFF' // 设置上导航栏上的字体的颜色,默认是纯白色
},
storageOptions: { // 存储的设置项
path:'savePhotoPath' // 创建存储的文件夹路径,/内存卡/Android/data/packageName/savePhotoPath
},
isCrop:true,//该参数为true时对第一张图片进行头像截取(可不传该参数)
};
ImagePickerManager.selectImage(options, (response) => {
console.log('Response = ', response);
if (response.didCancel) {
console.log('用户取消选择');
}else if (response.error) {
console.log('图片选取错误: ', response.error);
}else {
// 保存回调数据,将选择的第一张图片进行演示
this.setState({
avatarSource: response.results[0]
});
}
});
}
//进行拍照
selectPhotoFromCamera() {
//参数设置
const options = {
quality: 1, // 照片压缩率,按照像素压缩
maxWidth: 500, // 最大尺寸宽度
maxHeight: 500, // 最大尺寸高度
storageOptions: { // 存储的设置项
path:'savePhotoPath2' // 创建存储的文件夹路径,Android.data.packageName.savePhotoPath
}
};
ImagePickerManager.launchCamera(options, (response) => {
console.log('Response = ', response);
if (response.didCancel) {
console.log('用户取消选择');
}else if (response.error) {
console.log('图片选取错误: ', response.error);
}else {
// 保存回调数据,将选择的第一张图片进行演示
this.setState({
avatarSource: response.results[0]
});
}
});
}
userSelect(){
console.log('userSelect');
//调用Android,提示出来选择列表(也可以其他方式)
ImagePickerManager.showImagePicker("这是选择标题","取消选择",["拍照","照片选择"], (response) => {
console.log('Response = ', response);
if (response.error){
console.log('showImagePicker: ', response.error);
return;
}
switch(response.which){
case 0:
this.selectPhotoFromCamera();
break;
case 1:
this.selectPhotoFromLibrary();
break;
default:
console.log('取消');
break;
}
});
}
// 渲染视图
render() {
return (
<View style={styles.container}>
<TouchableOpacity onPress={this.selectPhotoFromLibrary.bind(this)}>
<View style={[styles.avatar, styles.avatarContainer, {marginBottom: 20}]}>
<Text>选择照片</Text>
</View>
</TouchableOpacity>
<TouchableOpacity onPress={this.selectPhotoFromCamera.bind(this)}>
<View style={[styles.avatar, styles.avatarContainer, {marginBottom: 20}]}>
<Text>拍照</Text>
</View>
</TouchableOpacity>
<TouchableOpacity onPress={this.userSelect.bind(this)}>
<View style={[styles.avatar, styles.avatarContainer, {marginBottom: 20}]}>
<Text>用户自由选择</Text>
</View>
</TouchableOpacity>
<Image style={styles.image} source={this.state.avatarSource}></Image>
</View>
);
}
}
...
4、方法说明:
ImagePickerManager --- 管理对外接口的类文件
在类中暴露给js三个方法:
选择图片
: selectImage(ReadableMap options,Callback callback)启动相机
: launchCamera(ReadableMap options,Callback callback)显示选择框
: showImagePicker(String title, String cancelText,ReadableArray options, Callback callback)
参数说明
options
: 启动参数(下面会说明)callback
: 是当选择完成之后,将结果放到dic对象中回调给jstitle
: 对话框标题cancelText
: 对话框取消按钮文字
5、代码中核心类说明
PerformCompress
: 批量压缩和保存的处理类MultiImageSelectorActivity
: 照片选择控制界面MultiImageSelectorFragment
: 照片列表展示OptionBean
: 客户端配置封装
6、参数说明
传入参数options
|参数 |类型 |描述 | |---------------- |:--------:|:----------------- | |showCamera |bool |是否在照片列表中显示照相机 | |maxNumOfSelect |number |照片的最大选取个数 | |quality |number |像素压缩率 | |maxWidth |number |返回图片的最大宽度 | |maxHeight |number |返回图片的最大高度 | |listNavigationBarOptions |object |列表页面相关设置 | |storageOptions |object |存储设置项 |
listNavigationBarOptions
|参数 |类型 |描述 | |---------------- |:--------:|:----------------- | |buttonColor |string |ActionBar上面提交按钮的颜色,默认'#36AF00'| |indicatorColor |string |照片选择指示器,默认'#36AF00' | |backgroundColor |string |上导航条的背景颜色,默认'#000000'纯黑色 | |titleColor |string |上导航条上标题颜色,默认'#FFFFFF'白色 |
storageOptions
|参数 |类型 |描述 | |------------|:--------:|:----------------- | |path |string |创建存储的文件夹路径;如:savePhotoPath,如果有内存卡:/内存卡/Android/data/packageName/savePhotoPath;没有内存卡的话存在应用目录对应的目录 |
返回参数response
|参数 |类型 |描述 | |---------------- |:--------:|:----------------- | |error |string |图片选取错误信息,当有错误时才返回 | |didCancel |bool |用户取消照片选取,当用户取消选择照片时返回true | |denied |bool |没有照相机或者内存卡写入权限 | |numOfSelect |number |返回选择的照片个数,当正确选择照片后返回 | |results |object |返回的照片信息集,当正确选择完照片后返回 |
results
|参数 |类型 |描述 | |---------------- |:--------:|:----------------- | |uri |string |照片存在本地的路径 | |width |number |照片宽度 | |height |number |照片高度 | |fileSize |string |图片大小(字节) | |exif |object |数码照片的信息 |
exif 数码照片的信息,具体参数说明如下:
|参数 |类型 |描述 | |---------------- |:--------:|:----------------- | |DPIWidth |number |水平方向每个分辨率单元的像素数| |DPIHeight |number |垂直方向每个分辨率单元的像素数| |Make |string |设备制造商 | |Model |string |设备型号 | |DateTimeOriginal |string |照片的拍摄时间, 格式为2016-07-06 18:54:10 | |LensMake |string |镜头制造商 | |LensModel |string |镜头型号 | |Altitude |string |海拔高度 | |Latitude |string |纬度 | |LatitudeRef |string |纬度类型,北纬'N'、南纬'S'| |Longitude |string |经度 | |LongitudeRef |string |经度类型,东经'E'、西经'W'| |Orientation |number |照片朝向,值是数字,1表示朝上| |PixelWidth |number |水平方向像素点| |PixelHeight |number |垂直方向像素点|
Orientation表示图片的朝向,具体值如下:
ORIENTATION_UNDEFINED = 0;
ORIENTATION_NORMAL = 1;
ORIENTATION_FLIP_HORIZONTAL = 2; // left right reversed mirror
ORIENTATION_ROTATE_180 = 3;
ORIENTATION_FLIP_VERTICAL = 4; // upside down mirror
ORIENTATION_TRANSPOSE = 5; // flipped about top-left <--> bottom-right axis
ORIENTATION_ROTATE_90 = 6; // rotate 90 cw to right it
ORIENTATION_TRANSVERSE = 7; // flipped about top-right <--> bottom-left axis
ORIENTATION_ROTATE_270 = 8; // rotate 270 to right it