热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nativereact图片裁剪_GitHubsyanbo/reactnativesyanimagepicker:ReactNative多图片选择支持裁剪压缩...

react-native-syan-image-picker功能介绍基于已有原生第三方框架封装的多图片选择组件,适用于ReactNativeApp。原生框架依赖功能特

react-native-syan-image-picker

功能介绍

基于已有原生第三方框架封装的多图片选择组件,适用于 React Native App。

原生框架依赖

功能特点

支持 iOS、Android 两端

支持单选、多选

可自定义裁剪区域大小,支持圆形裁剪

可设置压缩质量

可设置是否返回图片 base64 编码

支持记录当前已选中的图片

支持删除指定下标的图片

Live

安装使用

安装

// Step 1 基于 npm

npm install react-native-syan-image-picker --save

// 或是 yarn

yarn add react-native-syan-image-picker

// Step 2 执行 link

react-native link react-native-syan-image-picker

其他配置

iOS

1、添加原生框架中所需的 bundle 文件:

TARGETS -> Build Phases -> Copy Bundle Resources

点击"+"按钮,在弹出的窗口中点击“Add Other”按钮,选择

node_modules/react-native-syan-image-picker/ios/TZImagePickerController/TZImagePickerController.bundle

2、添加相册相关权限:

项目目录->Info.plist->增加

Privacy - Camera Usage Description 是否允许此App使用你的相机进行拍照?

Privacy - Photo Library Usage Description 请允许访问相册以选取照片

Privacy - Photo Library Additions Usage Description 请允许访问相册以选取照片

Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据

3、中文适配:

添加中文 PROJECT -> Info -> Localizations 点击"+"按钮,选择Chinese(Simplified)

Android

1、在 AndroidManifest.xml 中添加权限:

2、更新到 PictureSelector需要修改minSdkVersion:

// app/build.gradle

android {

minSdkVersion = 19

...

}

3、拍照前动态获取权限

requestPermission = async () => {

try {

const granted = await PermissionsAndroid.request(

PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,

{

title: '申请读写手机存储权限',

message:

'一个很牛逼的应用想借用你的摄像头,' +

'然后你就可以拍出酷炫的皂片啦。',

buttonNeutral: '等会再问我',

buttonNegative: '不行',

buttonPositive: '好吧',

},

);

if (granted === PermissionsAndroid.RESULTS.GRANTED) {

console.log('现在你获得摄像头权限了');

} else {

console.log('用户并不给你');

}

} catch (err) {

console.warn(err);

}

};

4、同时使用 fast-image 需要使用glide 版本

在build.gradle的buildscript,ext下新增glideVersion指定和fast-image一样的版本

新增 pictureVersion 自定义picture_library版本

注意安装运行报错

检查自动 link 是否成功

使用 Android Studio 查看 MainApplication.java 文件是否添加 new RNSyanImagePickerPackage()

使用 Android Studio 打开项目检查 Gradle 是否同步完成

可以运行 ImagePickerExample 该 Demo,测试 Android 7.0,6.0 拍照选图都为正常

link失败手动添加

iOS

In XCode, in the project navigator, right click Libraries ➜ Add Files to [your project's name]

Go to node_modules ➜ react-native-syan-image-picker and add RNSyanImagePicker.xcodeproj

In XCode, in the project navigator, select your project. Add libRNSyanImagePicker.a to your project's Build Phases ➜ Link Binary With Libraries

Run your project (Cmd&#43;R)<

Android

Open up android/app/src/main/java/[...]/MainApplication.java

Add import com.reactlibrary.RNSyanImagePickerPackage; to the imports at the top of the file

Add new RNSyanImagePickerPackage() to the list returned by the getPackages() method

Append the following lines to android/settings.gradle:

include &#39;:react-native-syan-image-picker&#39;

project(&#39;:react-native-syan-image-picker&#39;).projectDir &#61; new File(rootProject.projectDir, &#39;../node_modules/react-native-syan-image-picker/android&#39;)

Insert the following lines inside the dependencies block in android/app/build.gradle:

compile project(&#39;:react-native-syan-image-picker&#39;)

运行示例

配置参数说明

组件调用时&#xff0c;支持传入一个 options 对象&#xff0c;可设置的属性如下&#xff1a;

属性名

类型

是否可选

默认值

描述

imageCount

int

6

最大选择图片数目

isRecordSelected

bool

false

记录当前已选中的图片

isCamera

bool

true

是否允许用户在内部拍照

isCrop

bool

false

是否允许裁剪&#xff0c;imageCount 为1才生效

CropW

int

screenW * 0.6

裁剪宽度&#xff0c;默认屏幕宽度60%

CropH

int

screenW * 0.6

裁剪高度&#xff0c;默认屏幕宽度60%

isGif

bool

false

是否允许选择GIF&#xff0c;暂无回调GIF数据

showCropCircle

bool

false

是否显示圆形裁剪区域

circleCropRadius

float

screenW * 0.5

圆形裁剪半径&#xff0c;默认屏幕宽度一半

showCropFrame

bool

true

是否显示裁剪区域

showCropGrid

bool

false

是否隐藏裁剪区域网格

quality

int

90

压缩质量(安卓无效&#xff0c;固定鲁班压缩)

minimumCompressSize

int

100

小于100kb的图片不压缩(Android)

enableBase64

bool

false

是否返回base64编码&#xff0c;默认不返回

freeStyleCropEnabled

bool

false

裁剪框是否可拖拽(Android)

rotateEnabled

bool

true

裁剪是否可旋转图片(Android)

scaleEnabled

bool

true

裁剪是否可放大缩小图片(Android)

showSelectedIndex

bool

false

是否显示序号

返回结果说明

以 Callback 形式调用时&#xff0c;返回的第一个参数为错误对象&#xff0c;第二个才是图片数组&#xff1a;

属性名

类型

描述

error

object

取消拍照时不为 null&#xff0c;此时 error.message &#61;&#61; &#39;取消&#39;

photos

array

选择的图片数组

而以 Promise 形式调用时&#xff0c;则直接返回图片数组&#xff0c;在 catch 中去处理取消选择的情况。

下面是每张图片对象所包含的属性&#xff1a;

属性名

类型

描述

width

int

图片宽度

height

int

图片高度

uri

string

图片路径

original_uri

string

图片原始路径&#xff0c;仅 Android

type

string

文件类型&#xff0c;仅 Android&#xff0c;当前只返回 image

size

int

图片大小&#xff0c;单位为字节 b

base64

string

图片的 base64 编码&#xff0c;如果 enableBase64 设置 false&#xff0c;则不返回该属性

方法调用

Callback

回调形式需调用 showImagePicker 方法&#xff1a;

import SyanImagePicker from &#39;react-native-syan-image-picker&#39;;

SyanImagePicker.showImagePicker(options, (err, selectedPhotos) &#61;> {

if (err) {

// 取消选择

return;

}

// 选择成功&#xff0c;渲染图片

// ...

})

Promise

非回调形式则使用 asyncShowImagePicker 方法&#xff1a;

import SyanImagePicker from &#39;react-native-syan-image-picker&#39;;

// promise-then

SYImagePicker.asyncShowImagePicker(options)

.then(photos &#61;> {

// 选择成功

})

.catch(err &#61;> {

// 取消选择&#xff0c;err.message为"取消"

})

// async/await

handleSelectPhoto &#61; async () &#61;> {

try {

const photos &#61; await SYImagePicker.asyncShowImagePicker(options);

// 选择成功

} catch (err) {

// 取消选择&#xff0c;err.message为"取消"

}

}

移除选中图片

在 React Native 页面移除选中的图片后&#xff0c;需调用 removePhotoAtIndex 方法&#xff0c;来删除原生中保存的图片数组&#xff0c;确保下次进入图片选择时&#xff0c;已选中的图片保持一致&#xff1a;

handleDeletePhoto &#61; index &#61;> {

const { selectedPhotos: oldPhotos } &#61; this.state;

const selectedPhotos &#61; oldPhotos.filter((photo, photoIndex) &#61;> photoIndex !&#61;&#61; index);

// 更新原生图片数组

SYImagePicker.removePhotoAtIndex(index);

// 更新 RN 页面

this.setState({ selectedPhotos });

}

移除全部选中图片

STImagePicke.removeAllPhoto()

调用相机

相机功能调用方法&#xff0c;一样支持 Callback 和 Promise 两种形式&#xff0c;结果参数也保持一致。

//Callback方式

SyanImagePicker.openCamera(options, (err, photos) &#61;> {

if (err) {

// 取消选择

return;

}

// 选择成功&#xff0c;渲染图片

// ...

})

//Promise方式

SYImagePicker.asyncOpenCamera(options)

.then(()&#61;>{

...

})

.catch(()&#61;>{

...

})

选择视频

SyanImagePicker.openVideoPicker(options, (err, videos) &#61;> {

if (err) {

// 取消选择

return;

}

// 选择成功&#xff0c;处理视频

// ...

})

options 可选配置&#xff1a;

{

MaxSecond: 60,

MinSecond: 0,

recordVideoSecond: 60,

videoCount: 1

}

返回结果&#xff1a;

type

value

iOS

Android

uri

string

fileName

string

size

string

duration

number

width

number

height

number

type

string

mime

string

coverUri

string

favorite

string

mediaType

string

Android 返回结果&#xff1a;

{

mime: "video/mp4",

type: "video",

height: 1080,

width: 1920,

duration: 30.22,

size: 63876724,

fileName: "VID_20200409_11492864.mp4",

uri: "file:///storage/emulated/0/DCIM/Camera/VID_20200409_11492864.mp4",

coverUri: "file:///storage/emulated/0/Android/data/package_id/cache/thumb-c3c99b6a.jpg"

}

注&#xff1a;uri 包含协议 "file://"

删除缓存

SYImagePicker.deleteCache();

版本记录

0.4.10 新增showSelectedIndex参数&#xff0c;是否显示选中序号

帮助

加入 React-Native QQ群 397885169

非常感谢

捐赠

随时欢迎&#xff01;&#xff01;☕️☕️☕️✨✨



推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 前言折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  •        在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下:       1、CentOS6.7下安装JDK,地址:http:b ... [详细]
  • MySQL binlog与增量备份的基本原理总结
    定义binlog是记录所有数据库表结构变更(例如CREATE、ALTERTABLE…)以及表数据修改(INSERT、UPDATE即使up ... [详细]
  • 今天周六,原则上要休息,但想到下周还有一堆任务,还是先做一部分工作吧,就把之前做的票面设计器改了改,增加了上传图片和更换背景底图的功能。现在打算整理下这个设计器,也算对齐一个总结。不过这属于我们部门的 ... [详细]
author-avatar
张琇萍家云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有