UNPKG

@tuofeng/react-native-image-picker

Version:

Image Picker

195 lines (187 loc) 16.7 kB
import { NativeModules, Platform, ActionSheetIOS } from 'react-native' const UIImagePickerManager = NativeModules.ImagePickerManager const ImagePickerManager = NativeModules.TFImagePickerManager export default class ImagePicker { // 拍照选择图片 static launchCamera(option, cb) { // 参数设置 const options = { quality: typeof option.quality !== 'undefined' ? option.quality : 1.0, // 照片压缩率,按照像素压缩 ios&android maxWidth: typeof option.maxWidth !== 'undefined' ? option.maxWidth : 180, // 最大尺寸宽度 ios&android maxHeight: typeof option.maxHeight !== 'undefined' ? option.maxHeight : 180, // 最大尺寸高度 ios&android isCrop: typeof option.isCrop !== 'undefined' ? option.isCrop : true, // 是否裁剪 allowsEditing: typeof option.allowsEditing !== 'undefined' ? option.allowsEditing : false, // 是否允许系统编辑 ios saveAlbum: typeof option.saveAlbum !== 'undefined' ? option.saveAlbum : false, // 是否允许保存到系统相册 ios imageFileType: typeof option.imageFileType !== 'undefined' ? option.imageFileType : 'png', // 指定图片的保存本地类型 ios customCamera: option.customCamera, storageOptions: typeof option.storageOptions !== 'undefined' ? { // 存储的设置项 ios&android skipBackup: typeof option.storageOptions.skipBackup !== 'undefined' ? option.storageOptions.skipBackup : true, // 默认true表示跳过备份到iCloud和iTunes,一般应用中不包含用户的数据的文件无须备份 ios path: typeof option.storageOptions.path !== 'undefined' ? option.storageOptions.path : 'savePhotoPath', // 创建存储的文件夹路径,图片保存在沙盒caches下的文件夹名称 ios&android } : { // 存储的设置项 ios&android skipBackup: true, // 默认true表示跳过备份到iCloud和iTunes,一般应用中不包含用户的数据的文件无须备份 ios path: 'savePhotoPath', // 创建存储的文件夹路径,图片保存在沙盒caches下的文件夹名称 ios&android }, cropOptions: typeof option.cropOptions !== 'undefined' ? { // 裁剪项设置 ios showMidLines: typeof option.cropOptions.showMidLines !== 'undefined' ? option.cropOptions.showMidLines : true, // 是否显示中间的拖拽 ios cropAreaCornerWidth: typeof option.cropOptions.cropAreaCornerWidth !== 'undefined' ? option.cropOptions.cropAreaCornerWidth : 20, // 设置角拖拽区的宽度 ios cropAreaCornerHeight: typeof option.cropOptions.cropAreaCornerHeight !== 'undefined' ? option.cropOptions.cropAreaCornerHeight : 20, // 设置角拖拽区的高度 ios cropAreaCornerLineWidth: typeof option.cropOptions.cropAreaCornerLineWidth !== 'undefined' ? option.cropOptions.cropAreaCornerLineWidth : 2, // 设置角框的宽度 ios cropAreaBorderLineWidth: typeof option.cropOptions.cropAreaBorderLineWidth !== 'undefined' ? option.cropOptions.cropAreaBorderLineWidth : 2, // 设置选取框的宽度 ios cropAreaMidLineWidth: typeof option.cropOptions.cropAreaMidLineWidth !== 'undefined' ? option.cropOptions.cropAreaMidLineWidth : 40, // 设置中间拖拽区的宽度 ios cropAreaMidLineHeight: typeof option.cropOptions.cropAreaMidLineHeight !== 'undefined' ? option.cropOptions.cropAreaMidLineHeight : 2, // 设置中间拖拽区的高度 ios minSpace: typeof option.cropOptions.minSpace !== 'undefined' ? option.minSpace : 10, // 设置选取区的最小尺寸,最小区域 ios cropAreaBorderLineColor: typeof option.cropOptions.cropAreaBorderLineColor !== 'undefined' ? option.cropOptions.cropAreaBorderLineColor : '#808080', // 选取区域边框框的颜色, 默认灰色 ios cropAreaCornerLineColor: typeof option.cropOptions.cropAreaCornerLineColor !== 'undefined' ? option.cropOptions.cropAreaCornerLineColor : '#FFFFFF', // 设置角拖拽视图的颜色, 默认白色 ios cropAreaMidLineColor: typeof option.cropOptions.cropAreaMidLineColor !== 'undefined' ? option.cropOptions.cropAreaMidLineColor : '#FFFFFF', // 设置中间拖拽视图的颜色, 默认白色 ios } : { // 裁剪项设置 ios showMidLines: true, // 是否显示中间的拖拽 ios cropAreaCornerWidth: 20, // 设置角拖拽区的宽度 ios cropAreaCornerHeight: 20, // 设置角拖拽区的高度 ios cropAreaCornerLineWidth: 2, // 设置角框的宽度 ios cropAreaBorderLineWidth: 2, // 设置选取框的宽度 ios cropAreaMidLineWidth: 40, // 设置中间拖拽区的宽度 ios cropAreaMidLineHeight: 2, // 设置中间拖拽区的高度 ios minSpace: 10, // 设置选取区的最小尺寸,最小区域 ios cropAreaBorderLineColor: '#808080', // 选取区域边框框的颜色, 默认灰色 ios cropAreaCornerLineColor: '#FFFFFF', // 设置角拖拽视图的颜色, 默认白色 ios cropAreaMidLineColor: '#FFFFFF', // 设置中间拖拽视图的颜色, 默认白色 ios }, } if (Platform.OS === 'ios') { ImagePickerManager.phoneFromCamera(options, cb) } else { UIImagePickerManager.launchCamera(options, cb) } } // 图库选择图片 static showImagePicker(option, cb) { const options = { showCamera: typeof option.showCamera !== 'undefined' ? option.showCamera : true, // 是否显示照相机 maxNumOfSelect: typeof option.maxNumOfSelect !== 'undefined' ? option.maxNumOfSelect : 1, // 照片最大选取数 ios&android quality: typeof option.quality !== 'undefined' ? option.quality : 1, // 照片压缩率,按照像素压缩 ios&android maxWidth: typeof option.maxWidth !== 'undefined' ? option.maxWidth : 180, // 最大尺寸宽度 ios&android maxHeight: typeof option.maxHeight !== 'undefined' ? option.maxHeight : 180, // 最大尺寸高度 ios&android listNavigationBarOptions: typeof option.listNavigationBarOptions !== 'undefined' ? { // 缩略图页面,上导航条的设置项 ios&android buttonColor: typeof option.listNavigationBarOptions.buttonColor !== 'undefined' ? option.listNavigationBarOptions.buttonColor : '#22a563', // 完成按钮的背景颜色 android indicatorColor: typeof option.listNavigationBarOptions.indicatorColor !== 'undefined' ? option.listNavigationBarOptions.indicatorColor : '#22a563', // 数字指示器的背景颜色 android backgroundColor: typeof option.listNavigationBarOptions.backgroundColor !== 'undefined' ? option.listNavigationBarOptions.backgroundColor : '#22a563', // 上导航栏的背景颜色,默认为纯黑色 ios&android titleColor: typeof option.listNavigationBarOptions.titleColor !== 'undefined' ? option.listNavigationBarOptions.titleColor : '#FFFFFF', // 设置上导航栏上的字体的颜色,默认是纯白色 ios&android borderColor: typeof option.listNavigationBarOptions.borderColor !== 'undefined' ? option.listNavigationBarOptions.borderColor : '#6fd09f', // 设置完成按钮边框颜色 android alpha: typeof option.listNavigationBarOptions.alpha !== 'undefined' ? option.listNavigationBarOptions.alpha : 0.8, // 设置上导航视图的透明度,默认为0.8 ios } : { buttonColor: '#22a563', // 完成按钮的背景颜色 android indicatorColor: '#22a563', // 数字指示器的背景颜色 android backgroundColor: '#22a563', // 上导航栏的背景颜色,默认为纯黑色 ios&android titleColor: '#FFFFFF', // 设置上导航栏上的字体的颜色,默认是纯白色 ios&android borderColor: '#6fd09f', // 设置完成按钮边框颜色 android alpha: 0.8, // 设置上导航视图的透明度,默认为0.8 ios }, storageOptions: typeof option.storageOptions !== 'undefined' ? { // 存储的设置项 ios&android path: typeof option.storageOptions.path !== 'undefined' ? option.storageOptions.path : 'savePhotoPath', // 创建存储的文件夹路径,/内存卡/Android/data/packageName/savePhotoPath ios&android skipBackup: typeof option.storageOptions.skipBackup !== 'undefined' ? option.storageOptions.skipBackup : true, // 默认true表示跳过备份到iCloud和iTunes,一般应用中不包含用户的数据的文件无须备份 ios } : { // 存储的设置项 ios&android path: 'savePhotoPath', // 创建存储的文件夹路径,/内存卡/Android/data/packageName/savePhotoPath ios&android skipBackup: true, // 默认true表示跳过备份到iCloud和iTunes,一般应用中不包含用户的数据的文件无须备份 ios }, isCrop: typeof option.isCrop !== 'undefined' ? option.isCrop : true, // 是否裁剪 listFinishBarOptions: typeof option.listFinishBarOptions !== 'undefined' ? { // 缩略图页面,完成状态栏设置项 ios backgroundColor: typeof option.listFinishBarOptions.backgroundColor !== 'undefined' ? option.listFinishBarOptions.backgroundColor : '#FAFAFA', // 完成状态栏背景颜色,默认浅灰色 ios tintColor: typeof option.listFinishBarOptions.tintColor !== 'undefined' ? option.listFinishBarOptions.tintColor : '#09bb07', // 状态栏上完成按钮和文本框背景颜色, 默认纯绿色 ios titleColor: typeof option.listFinishBarOptions.titleColor !== 'undefined' ? option.listFinishBarOptions.titleColor : '#FFFFFF', // 显示选择个数的文本颜色,默认纯白色 ios splitLineColor: typeof option.listFinishBarOptions.splitLineColor !== 'undefined' ? option.listFinishBarOptions.splitLineColor : '#bfbfbf', // 状态栏上分割线颜色 ios splitLineHeight: typeof option.listFinishBarOptions.splitLineHeight !== 'undefined' ? option.listFinishBarOptions.splitLineHeight : 1, // 分割线的高度,默认1个像素 ios } : { backgroundColor: '#FAFAFA', // 完成状态栏背景颜色,默认浅灰色 ios tintColor: '#09bb07', // 状态栏上完成按钮和文本框背景颜色, 默认纯绿色 ios titleColor: '#FFFFFF', // 显示选择个数的文本颜色,默认纯白色 ios splitLineColor: '#bfbfbf', // 状态栏上分割线颜色 ios splitLineHeight: 1, // 分割线的高度,默认1个像素 ios }, bigNavigationBarOptions: typeof option.bigNavigationBarOptions !== 'undefined' ? { // 大图页面,上导航条设置项 ios backgroundColor: typeof option.bigNavigationBarOptions.backgroundColor !== 'undefined' ? option.bigNavigationBarOptions.backgroundColor : '#000000', // 上导航栏的背景颜色,默认为纯黑色 ios alpha: typeof option.bigNavigationBarOptions.alpha !== 'undefined' ? option.bigNavigationBarOptions.alpha : 0.5, // 设置上导航视图的透明度,默认为0.5 ios } : { backgroundColor: '#000000', // 上导航栏的背景颜色,默认为纯黑色 ios alpha: 0.5, // 设置上导航视图的透明度,默认为0.5 ios }, bigFinishBarOptions: typeof option.bigFinishBarOptions !== 'undefined' ? { // 大图页面,完成状态栏设置项 ios backgroundColor: typeof option.bigFinishBarOptions.backgroundColor !== 'undefined' ? option.bigFinishBarOptions.backgroundColor : '#000000', // 完成状态栏背景颜色,默认为纯黑色 ios alpha: typeof option.bigFinishBarOptions.alpha !== 'undefined' ? option.bigFinishBarOptions.alpha : 0.5, // 设置状态栏的透明度,默认为0.5 ios tintColor: typeof option.bigFinishBarOptions.tintColor !== 'undefined' ? option.bigFinishBarOptions.tintColor : '#008000', // 状态栏上完成按钮和文本框背景颜色, 默认纯绿色 ios titleColor: typeof option.bigFinishBarOptions.titleColor !== 'undefined' ? option.bigFinishBarOptions.titleColor : '#FFFFFF', // 显示选择个数的文本颜色,默认纯白色 ios } : { // 大图页面,完成状态栏设置项 ios backgroundColor: '#000000', // 完成状态栏背景颜色,默认为纯黑色 ios alpha: 0.5, // 设置状态栏的透明度,默认为0.5 ios tintColor: '#008000', // 状态栏上完成按钮和文本框背景颜色, 默认纯绿色 ios titleColor: '#FFFFFF', // 显示选择个数的文本颜色,默认纯白色 ios }, cropOptions: typeof option.cropOptions !== 'undefined' ? { // 裁剪项设置 ios showMidLines: typeof option.cropOptions.showMidLines !== 'undefined' ? option.cropOptions.showMidLines : true, // 是否显示中间的拖拽 ios cropAreaCornerWidth: typeof option.cropOptions.cropAreaCornerWidth !== 'undefined' ? option.cropOptions.cropAreaCornerWidth : 20, // 设置角拖拽区的宽度 ios cropAreaCornerHeight: typeof option.cropOptions.cropAreaCornerHeight !== 'undefined' ? option.cropOptions.cropAreaCornerHeight : 20, // 设置角拖拽区的高度 ios cropAreaCornerLineWidth: typeof option.cropOptions.cropAreaCornerLineWidth !== 'undefined' ? option.cropOptions.cropAreaCornerLineWidth : 2, // 设置角框的宽度 ios cropAreaBorderLineWidth: typeof option.cropOptions.cropAreaBorderLineWidth !== 'undefined' ? option.cropOptions.cropAreaBorderLineWidth : 2, // 设置选取框的宽度 ios cropAreaMidLineWidth: typeof option.cropOptions.cropAreaMidLineWidth !== 'undefined' ? option.cropOptions.cropAreaMidLineWidth : 40, // 设置中间拖拽区的宽度 ios cropAreaMidLineHeight: typeof option.cropOptions.cropAreaMidLineHeight !== 'undefined' ? option.cropOptions.cropAreaMidLineHeight : 2, // 设置中间拖拽区的高度 ios minSpace: typeof option.cropOptions.minSpace !== 'undefined' ? option.cropOptions.minSpace : 10, // 设置选取区的最小尺寸,最小区域 ios cropAreaBorderLineColor: typeof option.cropOptions.cropAreaBorderLineColor !== 'undefined' ? option.cropOptions.cropAreaBorderLineColor : '#808080', // 选取区域边框框的颜色, 默认灰色 ios cropAreaCornerLineColor: typeof option.cropOptions.cropAreaCornerLineColor !== 'undefined' ? option.cropOptions.cropAreaCornerLineColor : '#FFFFFF', // 设置角拖拽视图的颜色, 默认白色 ios cropAreaMidLineColor: typeof option.cropOptions.cropAreaMidLineColor !== 'undefined' ? option.cropOptions.cropAreaMidLineColor : '#FFFFFF', // 设置中间拖拽视图的颜色, 默认白色 ios } : { // 裁剪项设置 ios showMidLines: true, // 是否显示中间的拖拽 ios cropAreaCornerWidth: 20, // 设置角拖拽区的宽度 ios cropAreaCornerHeight: 20, // 设置角拖拽区的高度 ios cropAreaCornerLineWidth: 2, // 设置角框的宽度 ios cropAreaBorderLineWidth: 2, // 设置选取框的宽度 ios cropAreaMidLineWidth: 40, // 设置中间拖拽区的宽度 ios cropAreaMidLineHeight: 2, // 设置中间拖拽区的高度 ios minSpace: 10, // 设置选取区的最小尺寸,最小区域 ios cropAreaBorderLineColor: '#808080', // 选取区域边框框的颜色, 默认灰色 ios cropAreaCornerLineColor: '#FFFFFF', // 设置角拖拽视图的颜色, 默认白色 ios cropAreaMidLineColor: '#FFFFFF', // 设置中间拖拽视图的颜色, 默认白色 ios }, } if (Platform.OS === 'ios') { ImagePickerManager.showImagePicker(options, cb) } else { UIImagePickerManager.selectImage(options, cb) } } // 用户选择框 static userSelect(cb) { if (Platform.OS === 'ios') { this.alertIOS(cb) } else { this.alertAndroid(cb) } } // 用户选择框 ios static alertIOS(cb) { ActionSheetIOS.showActionSheetWithOptions({ options: ['拍照', '从手机相册选取', '取消'], cancelButtonIndex: 2, }, (index) => { cb(index) }) } // 用户选择框 android static alertAndroid(cb) { UIImagePickerManager.showImagePicker('添加照片', '取消', ['拍照', '从手机相册选择'], (response) => { cb(response.which) }) } static cutImage(imagePath, react, callBack) { if (Platform.OS === 'ios') { ImagePickerManager.cutImageFromImage(imagePath, react, callBack) } else { UIImagePickerManager.cutImageFromImage(imagePath, react, callBack) } } static zoomImage(imagePath, size, callBack) { if (Platform.OS === 'ios') { ImagePickerManager.zoomImage(imagePath, size, callBack) } else { UIImagePickerManager.zoomImage(imagePath, size, callBack) } } }