一、react-native-image-crop-picker官方链接

二、简述react-native-image-crop-picker 的常用API即属性

//调用系统相册选择图片
ImagePicker.openPicker({width: 300, //设定上传图片的宽度(一般在移动端除非产品设计了图片必须什么宽高,否则会经常不兼容)height: 400, //设定上传图片的高度cropping: true, //是否可以剪切multiple: true, //是否支持多选cropperChooseText: '确定', //右下角选中按钮可以用中文描述cropperCancelText: '取消', //右下角取消按钮可以用中文描述compressImageQuality: 0.2,//压缩图像的质量(从0到1,1是最好的质量)。在iOS上,大于0.8的值不会在大多数图像中产生明显的质量提升,而0.8的值会比1的值减少一半或更少的文件大小includeBase64: true,// 当设置为true时,图像文件内容将作为base64编码的字符串在data属性中可用。提示:要使用这个字符串作为图像源
}).then(image => {console.log(image);
});//调用相机拍照
ImagePicker.openCamera({width: 300,height: 400,cropping: true,
}).then(image => {console.log(image);
});

三、附上项目截图:支持拍照和上传图片

四、项目部分代码片段

import ImagePicker from 'react-native-image-crop-picker';
// 调用系统相册选择图片openImagePicker = async () => {const { imgList } = this.state;if (imgList.length && imgList.length >= 60) {return Toast.info('最多上传60张图片!');}const uploadresult = await ImagePicker.openPicker({cropperChooseText: '确定',cropperCancelText: '取消',multiple: true,           //可多选cropping: false,          //不可剪切//  includeBase64: true,compressImageQuality: 0.2,   //照片压缩比例:0.2});//上传本地图片多张后,进行遍历uploadresult.forEach(async ii => {//ii.size / (1024 * 1024) + 'MB' 每张照片尺寸为多少MB//ii.width 每张图片的宽度//ii.height 每张图片的高度//ii.modificationDate 每张图片的日期,例: 1611400769000,时间戳毫秒转换成 2021-01-23 19:19:29  官方链接:https://tool.lu/timestamp///例: size:0.03307628631591797MB ,width:1440 ,height:810console.log(ii.size / (1024 * 1024) + 'MB',',width:' + ii.width,',height:' + ii.height);//${Math.round(Math.random() * 1000000000000)} 拼接随机序列,保证每张图片的唯一性const fileName = `${ii.modificationDate}${Math.round(Math.random() * 1000000000000)}`;console.log(ii.modificationDate);this.uploadImage2Oss(fileName,ii.path);});}//调用相机拍照openCamera = async () => {const cameraImage = await ImagePicker.openCamera({cropperChooseText: '确定',cropperCancelText: '取消',cropping: false,multiple: true,// includeBase64: true,compressImageQuality: 0.2,});console.log(cameraImage.size / (1024 * 1024) + 'MB',',width:' + cameraImage.width,',height:' + cameraImage.height);const fileName = `${cameraImage.modificationDate}${Math.round(Math.random() * 1000000000000)}`;console.log(fileName);this.uploadImage2Oss(fileName,cameraImage.path);}// 上传图片到oss 客户端直传模式uploadImage2Oss= async (fileName,localFilePath) => {const restoken = await ResourceTokenServicegetToken({fileName: fileName,});const { codeInfo, uploadToken = {} } = restoken;if (codeInfo && codeInfo.code === 0) {const { resId, endpoint, params } = uploadToken;console.log('resId',resId);console.log('endpoint',endpoint);console.log('params',params);const pat = JSON.parse(params);const data = new FormData(); //创建一个formData对象实例的方式,通过append方法添加数据for (const i in pat) {data.append(`${i}`, pat[i]);}data.append('resId', resId);const file = {uri: localFilePath,resId,...pat, type: 'multipart/form-data', name: fileName,};data.append('file', file);const uploadresult = await fetch(endpoint,{method: 'POST',body: data,});// eslint-disable-next-line eqeqeqif (uploadresult && uploadresult.status == 200) {// 从服务端获取上传图片地址const imgurl = await generateUrls({ resId: resId });// eslint-disable-next-line eqeqeqif (imgurl && imgurl.codeInfo.code == 0) {const { imgList, previewImageList } = this.state;const lists = imgList;const lists1 = previewImageList;this.setState({imgList: [...lists, imgurl.url],  //imgList:图片集合,远程cdn 地址,添加最新上传的imgurl.urlpreviewImageList: [...lists1, localFilePath], //previewImageList:预览图片集合,预览图片是本地的});}}}}

React Native在移动端APP上实现拍照与照片上传功能相关推荐

  1. 技术实践丨React Native 项目 Web 端同构

    摘要:尽管 React Native 已经进入开源的第 6 个年头,距离发布 1.0 版本依旧是遥遥无期."Learn once, write anywhere",完全不影响 Re ...

  2. 基于 React Native 的 58 同城 App 开发实践

    作者简介: 彭飞,58 同城 iOS 客户端架构师.专注于新技术的研发,主要负责 App 端组件化架构以及性能优化,并已推广 React Native 在 58 同城 App 中业务场景的应用.在 M ...

  3. 如何用 React Native 创建一个iOS APP?(二)

    我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...

  4. react native开发Android 篇——APP名称、图标、启动页

    react native开发Android 篇--APP名称.图标.启动页 设置APP名称 设置APP图标 设置启动页 隐藏启动页 设置APP名称 编辑 android/app/src/main/re ...

  5. React Native (一) react-native-video实现音乐播放器和进度条的功能

    React Native (一) react-native-video实现音乐播放器和进度条的功能 功能: 1.卡片滑动切歌 2.显示进度条 效果图: 第三方组件: 1.react-native-vi ...

  6. React Native使用指南-在设备上运行

    注意在iOS设备上运行React Native应用需要一个Apple Developer account并且把你的设备注册为测试设备.本向导只包含React Native相关的主题. 译注:从XCod ...

  7. React Native制作仿美团APP总结

    最近学习了一个网上的React Native项目,利用React Native制作一个类似于美团的App,项目属于对之前React Native常用组件的基本使用,但是仍有一些关键点值得记录.最后做成 ...

  8. react native学习笔记13——FlatList上拉加载

    我们可以利用官方组件RefreshControl实现下拉刷新功能,但React Native官方没有提供相应的上拉加载的组件,因此在RN中实现上拉加载比下拉刷新要复杂一点. 虽然没有直接提供上拉加载的 ...

  9. 【前端-React Native】移动端原生开发整合React Native Elements教程-安卓示例

    目录 一.移动开发和web开发的区别 二.什么是React Native? 三.如何实现安卓和IOS用一套代码开发 四.React Native开发实战 1. 安装Android studio 2. ...

最新文章

  1. CAD绘图控件VectorDraw web library (javascript)更新至v7.7014.1.0丨75折优惠
  2. Linux-LAMP-访问控制Directory
  3. 随机数文件,上传到hdfs的特定目录/logs下,用mr求和
  4. 写给运营同学和初学者的SQL入门教程
  5. Foxmail安装以及使用
  6. 两个常用的Infopath Service读取域值的函数
  7. RestTemplate使用笔记
  8. GO语言学习之路22
  9. 必须重视针对SCADA系统的***
  10. ElasticSearch学习(二):ElasticSearch下载与运行
  11. 如何写好一份软件开发设计文档
  12. Python快捷键大全(PyCharm常用)
  13. 202206-2 寻宝大冒险
  14. spring的核心模块
  15. 主流的工业以太网简介及比较(EPA , EtherCAT , Ethernet Powerlink , PROFINET, Ethernet/IP, SERCOS III)
  16. 盛天海科技:拼多多团长这样来做
  17. 微信小程序怎么推广运营-微信小程序引流方法
  18. jdom操作xml实战
  19. Codeforces Round #271 (Div. 2) F ,E, D, C, B, A
  20. 功利主义穆勒思维导图_穆勒功利主义读书笔记

热门文章

  1. 如何解决虚拟机频繁分离和附加磁盘导致的识别错误
  2. centos7.0 安装nginx
  3. 软件测试系列---软件测试基础
  4. OCX和DLL的区别
  5. Android 内存优化
  6. 如何搞30等角视图.斜45度说法不合理
  7. Android log打印不出来
  8. Android 多屏显示分析
  9. 南通大学python期末考试试卷答案_南通大学试卷A(答案及评分标准)
  10. 一篇文章搞懂fof好友推荐案例