react-native-lib-cus-com
Version:
react-native 自定义辅助组件库,完美的网路请求,带加载条,可上传、下载文件,等等多种ui,可自定义删除;可节省应用级软件的开发时间
294 lines (261 loc) • 9.56 kB
JavaScript
import {
CameraRoll,
Platform,
} from 'react-native';
// import ImagePicker from 'react-native-image-crop-picker';
// import VideoMgr from 'react-native-image-picker';
// import RNFS from "react-native-fs";
import {Tools} from "./Tools";
import {Components} from "./../StackComponent";
const ImagePicker = Components.react_native_image_crop_picker;
const VideoMgr = Components.react_native_image_picker;
// const RNFS = Components.react_native_fs;
//第三方相机和录像
/**
* 媒体类,处理摄像头使用和相册的使用 相册文件操作
* export default class Tools //在外部引用时不需要大括号括起来,如:import Tools from 路径
* export class Tools //import {Tools} from 路径
* **/
export class Media {
/* static destVideos = RNFS.DocumentDirectoryPath
? Platform.OS == "ios"
? `${RNFS.DocumentDirectoryPath}/video`
: `${RNFS.ExternalStorageDirectoryPath}/video`
: null;//下载目录*/
static verfyComponent(type = 1){
let b = true;
switch (type){
case 1:{
/* if(!RNFS.DocumentDirectoryPath){
console.info("请安装文件操作组件","react-native-fs");
Tools.toast("请安装组件 react-native-fs");
b = false;
}*/
break;
}
case 2:{
if(!ImagePicker.openPicker){
console.info("请安装图片剪辑及拍摄选择等操作组件","react-native-image-crop-picker");
Tools.toast("请安装组件 react-native-image-crop-picker");
b = false;
}
break;
}
case 3:{
if(!VideoMgr.launchCamera){
console.info("请安装图片视频剪辑及拍摄选择等操作组件","react-native-image-picker");
Tools.toast("请安装组件 react-native-image-picker");
b = false;
}
break;
}
}
return b;
}
/**
* 选择图片
* @param multiple bool,//true:多选,false:单选,默认是false
* @param taskName string,//任务更名
* @param isWater bool,//是否打水印 默认true打水印
* @param cd func,//拍照完成回调函数 打水印有效
* **/
static pickImage= (multiple,taskName,isWater=true,cd) => {
// if(!isWater)
if(true)
{
if(!Media.verfyComponent(2)){
return new Promise(resolve => {});
}
multiple = multiple == undefined ? false :multiple;
return ImagePicker.openPicker({
// writeTempFile:false,
compressImageMaxHeight:2000,
compressImageMaxWidth:2000,
multiple: multiple,
mediaType: "photo",
}).then(images => {
console.info("images",images);
return images;
});
return new Promise(function (resolve, reject){
VideoMgr.launchImageLibrary({
mediaType:'photo',
noData:true,
}, (response) => {
response.path = response.uri;
response.mine = 'images/jpeg';
console.info("response",response);
resolve([response]);
});
});
}
else {
return new Promise(resolve => {
Tools.imageBrower
.show(undefined,true)
.then((result)=>{
cd&&cd(result);
// result.path = result.photo;
IamgeWaterMark.markText(result.photo,taskName)
.then(path=>{
result.path = path;
console.info("result",result);
resolve(result);
});
});
});
}
/*//图片选择器参数设置
var options = {
title: '请选择图片来源',
cancelButtonTitle:'取消',
takePhotoButtonTitle:'拍照',
chooseFromLibraryButtonTitle:'相册图片',
customButtons: [
{name: 'hangge', title: 'hangge.com图片'},
],
storageOptions: {
skipBackup: true,
path: 'images'
}
};
return new Promise(function (resolve, reject) {
VideoMgr.showImagePicker(options, (response) => {
resolve(response);
});
});*/
}
/**
* 拍照
* @param taskName string,//任务名
* @param isWater bool,//是否打水印 默认true打水印
* @param cd func,//拍照完成回调函数 打水印有效
* **/
static takeImage = (taskName,isWater=true,cd) => {
let opts = {
// width: 300,
// height: 400,
compressImageMaxHeight:2000,
compressImageMaxWidth:2000,
cropping: false,
cropperCancelText:'取消',
cropperChooseText:'使用'
};
// if(!isWater)
if(true)
{
if(!Media.verfyComponent(2)){
return new Promise(resolve => {});
}
return ImagePicker.openCamera(opts)
.then(image => {
// CameraRoll.saveImageWithTag(image.path);
CameraRoll.saveToCameraRoll(image.path,'photo');
return image;
})
.catch((s)=>{
// Tools.toast("s " + s&&JSON.stringify(s));
});
}
return new Promise((resolve, reject) => {
if(Tools.userConfig.userInfo != '') {
ImagePicker.openCamera(opts)
.then(image => {
cd&&cd(image);
Tools.getLocation()
.then((location)=>{
location.taskName = taskName;
Tools.imageViewWatermark
.show(image.path,true,location)
.then(results=>{
CameraRoll.saveToCameraRoll(results.path,'photo')
.then((res)=>{
resolve(results);
});
});
});
//CameraRoll.saveImageWithTag(image.path);
// CameraRoll.saveToCameraRoll(image.path,'photo');
// return image;
})
.catch((s)=>{
//Tools.toast("s " + s&&JSON.stringify(s));
});
}
else
{
Tools.toast("请先登陆");
}
});
}
/**
* 清除拍摄图片的临时文件
* @param path string,//路径path不为null时清除path的文件,否则清除所有
* **/
static clean = (path)=>{
//console.log('removed all tmp images from tmp directory');
if(!Media.verfyComponent(2)){
return new Promise(resolve => {});
}
if(path == undefined)
{
return ImagePicker.clean().then().catch(e => e);
}
else
{
return ImagePicker.cleanSingle(path).then().catch(e => e);
}
}
/**
* 选择视频
* **/
static pickVideo = () => {
if(!Media.verfyComponent(2)){
return new Promise(resolve => {});
}
return ImagePicker.openPicker({
compressImageMaxHeight:640,
compressImageMaxWidth:640,
mediaType: "video",
}).then((video) => {
console.log(video)
video.path = video.path.substring(7);
return video;
});
}
/**
* 拍摄视频
* **/
static takeVideo = () =>{
return new Promise(function (resolve, reject){
if(Media.verfyComponent(3)){
VideoMgr.launchCamera({
mediaType:'video',
videoQuality:'high',
durationLimit:30,
compressImageMaxHeight:640,
compressImageMaxWidth:640,
}, (response) => {
// Same code as in above section!
// alert(JSON.stringify(response));
//return response;
if(response.uri == undefined)
{
reject(response);
}
else
{
response.uri = response.uri.substring(7);
CameraRoll.saveToCameraRoll(response.uri,'video');
response.path = response.uri;
resolve(response);
}
});
}
});
/*return Record.startRecord(path + 'sound.mp4', (err) => {
//console.log(err)
});*/
}
}
// RNFS.mkdir&&RNFS.mkdir(Media.destVideos);