Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
react-native-michael-image-picker
Advanced tools
基于已有原生第三方框架封装的多图片选择组件,适用于 React Native App。
// 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
bundle
文件:node_modules/react-native-syan-image-picker/ios/TZImagePickerController/TZImagePickerController.bundle
Privacy - Camera Usage Description 是否允许此App使用你的相机进行拍照?
Privacy - Photo Library Usage Description 请允许访问相册以选取照片
Privacy - Photo Library Additions Usage Description 请允许访问相册以选取照片
Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
build.gradle
中添加 maven { url "https://jitpack.io" }
和Google
配置:buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
maven { url "https://jitpack.io" }
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
AndroidManifest.xml
中添加权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
// app/build.gradle
android {
compileSdkVersion 26
buildToolsVersion "26.0.3"
...
}
MainApplication.java
文件是否添加 new RNSyanImagePickerPackage()
Libraries
➜ Add Files to [your project's name]
node_modules
➜ react-native-syan-image-picker
and add RNSyanImagePicker.xcodeproj
libRNSyanImagePicker.a
to your project's Build Phases
➜ Link Binary With Libraries
Cmd+R
)<android/app/src/main/java/[...]/MainApplication.java
import com.reactlibrary.RNSyanImagePickerPackage;
to the imports at the top of the filenew RNSyanImagePickerPackage()
to the list returned by the getPackages()
methodandroid/settings.gradle
:
include ':react-native-syan-image-picker'
project(':react-native-syan-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-syan-image-picker/android')
android/app/build.gradle
:
compile project(':react-native-syan-image-picker')
相关 Demo 见 ImagePickerExample。
组件调用时,支持传入一个 options
对象,可设置的属性如下:
属性名 | 类型 | 是否可选 | 默认值 | 描述 |
---|---|---|---|---|
imageCount | int | 是 | 6 | 最大选择图片数目 |
isRecordSelected | bool | 是 | false | 记录当前已选中的图片 |
isCamera | bool | 是 | true | 是否允许用户在内部拍照 |
isCrop | bool | 是 | false | 是否允许裁剪,imageCount 为1才生效 |
CropW | int | 是 | screenW * 0.6 | 裁剪宽度,默认屏幕宽度60% |
CropH | int | 是 | screenW * 0.6 | 裁剪高度,默认屏幕宽度60% |
isGif | bool | 是 | false | 是否允许选择GIF,暂无回调GIF数据 |
showCropCircle | bool | 是 | false | 是否显示圆形裁剪区域 |
circleCropRadius | float | 是 | screenW * 0.5 | 圆形裁剪半径,默认屏幕宽度一半 |
showCropFrame | bool | 是 | true | 是否显示裁剪区域 |
showCropGrid | bool | 是 | false | 是否隐藏裁剪区域网格 |
quality | int | 是 | 90 | 压缩质量 |
enableBase64 | bool | 是 | false | 是否返回base64编码,默认不返回 |
以 Callback
形式调用时,返回的第一个参数为错误对象,第二个才是图片数组:
属性名 | 类型 | 描述 |
---|---|---|
error | object | 取消拍照时不为 null,此时 error.message == '取消' |
photos | array | 选择的图片数组 |
而以 Promise
形式调用时,则直接返回图片数组,在 catch
中去处理取消选择的情况。
下面是每张图片对象所包含的属性:
属性名 | 类型 | 描述 |
---|---|---|
width | int | 图片宽度 |
height | int | 图片高度 |
uri | string | 图片路径 |
original_uri | string | 图片原始路径,仅 Android |
type | string | 文件类型,仅 Android,当前只返回 image |
size | int | 图片大小,单位为字节 b |
base64 | string | 图片的 base64 编码,如果 enableBase64 设置 false,则不返回该属性 |
回调形式需调用 showImagePicker
方法:
import SyanImagePicker from 'react-native-michael-image-picker';
SyanImagePicker.showImagePicker(options, (err, selectedPhotos) => {
if (err) {
// 取消选择
return;
}
// 选择成功,渲染图片
// ...
})
非回调形式则使用 asyncShowImagePicker
方法:
import SyanImagePicker from 'react-native-michael-image-picker';
// promise-then
SYImagePicker.asyncShowImagePicker(options)
.then(photos => {
// 选择成功
})
.catch(err => {
// 取消选择,err.message为"取消"
})
// async/await
handleSelectPhoto = async () => {
try {
const photos = await SYImagePicker.asyncShowImagePicker(options);
// 选择成功
} catch (err) {
// 取消选择,err.message为"取消"
}
}
在 React Native 页面移除选中的图片后,需调用 removePhotoAtIndex
方法,来删除原生中保存的图片数组,确保下次进入图片选择时,已选中的图片保持一致:
handleDeletePhoto = index => {
const { selectedPhotos: oldPhotos } = this.state;
const selectedPhotos = oldPhotos.filter((photo, photoIndex) => photoIndex !== index);
// 更新原生图片数组
SYImagePicker.removePhotoAtIndex(index);
// 更新 RN 页面
this.setState({ selectedPhotos });
}
STImagePicke.removeAllPhoto()
相机功能调用 openCamera
方法,一样支持 Callback 和 Promise 两种形式,结果参数也保持一致。
SYImagePicker.deleteCache();
加入 React-Native QQ群 397885169
随时欢迎!!☕️☕️☕️✨✨
FAQs
React-Native 多图片选择 支持裁剪 压缩
The npm package react-native-michael-image-picker receives a total of 1 weekly downloads. As such, react-native-michael-image-picker popularity was classified as not popular.
We found that react-native-michael-image-picker demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.