Socket
Socket
Sign inDemoInstall

rn_async_image_picker

Package Overview
Dependencies
0
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    rn_async_image_picker

React-Native 多图片选择 支持裁剪 压缩


Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

rn-syanc-image-picker

功能介绍

建议优先使用 https://github.com/syanbo/react-native-syan-image-picker

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

原生框架依赖

功能特点

  • 支持 iOS、Android 两端
  • 支持单选、多选
  • 可自定义裁剪区域大小,支持圆形裁剪
  • 可设置压缩质量
  • 可设置是否返回图片 base64 编码
  • 支持记录当前已选中的图片
  • 支持删除指定下标的图片

Live

安装使用

安装

// Step 1 基于 npm
npm install rn_async_image_picker --save

// 或是 yarn
yarn add rn_async_image_picker

// Step 2 执行 link
react-native link rn_async_image_picker

其他配置

iOS
1、添加原生框架中所需的 bundle 文件:
  • TARGETS -> Build Phases -> Copy Bundle Resources 点击"+"按钮,在弹出的窗口中点击“Add Other”按钮,选择
    node_modules/rn_async_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、在 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"
        }
    }
}
2、在 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" />
3、更新到 PictureSelector 2.2.0 需要修改:
// app/build.gradle

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.3"
    ...
}

注意安装运行报错

  1. 检查自动 link 是否成功
  2. 使用 Android Studio 查看 MainApplication.java 文件是否添加 new RNSyanImagePickerPackage()
  3. 使用 Android Studio 打开项目检查 Gradle 是否同步完成
  4. 可以运行 ImagePickerExample 该 Demo,测试 Android 7.0,6.0 拍照选图都为正常

link失败手动添加

iOS

  1. In XCode, in the project navigator, right click LibrariesAdd Files to [your project's name]
  2. Go to node_modulesrn_async_image_picker and add RNSyanImagePicker.xcodeproj
  3. In XCode, in the project navigator, select your project. Add libRNSyanImagePicker.a to your project's Build PhasesLink Binary With Libraries
  4. Run your project (Cmd+R)<

Android

  1. 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
  1. Append the following lines to android/settings.gradle:
    include ':rn_async_image_picker'
    project(':rn_async_image_picker').projectDir = new File(rootProject.projectDir, 	'../node_modules/rn_async_image_picker/android')
    
  2. Insert the following lines inside the dependencies block in android/app/build.gradle:
      compile project(':rn_async_image_picker')
    

运行示例

相关 Demo 见 ImagePickerExample

配置参数说明

组件调用时,支持传入一个 options 对象,可设置的属性如下:

属性名类型是否可选默认值描述
imageCountint6最大选择图片数目
isRecordSelectedboolfalse记录当前已选中的图片
isCamerabooltrue是否允许用户在内部拍照
isCropboolfalse是否允许裁剪,imageCount 为1才生效
CropWintscreenW * 0.6裁剪宽度,默认屏幕宽度60%
CropHintscreenW * 0.6裁剪高度,默认屏幕宽度60%
isGifboolfalse是否允许选择GIF,暂无回调GIF数据
showCropCircleboolfalse是否显示圆形裁剪区域
circleCropRadiusfloatscreenW * 0.5圆形裁剪半径,默认屏幕宽度一半
showCropFramebooltrue是否显示裁剪区域
showCropGridboolfalse是否隐藏裁剪区域网格
qualityint90压缩质量
enableBase64boolfalse是否返回base64编码,默认不返回

返回结果说明

Callback 形式调用时,返回的第一个参数为错误对象,第二个才是图片数组:

属性名类型描述
errorobject取消拍照时不为 null,此时 error.message == '取消'
photosarray选择的图片数组

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

下面是每张图片对象所包含的属性:

属性名类型描述
widthint图片宽度
heightint图片高度
uristring图片路径
original_uristring图片原始路径,仅 Android
typestring文件类型,仅 Android,当前只返回 image
sizeint图片大小,单位为字节 b
base64string图片的 base64 编码,如果 enableBase64 设置 false,则不返回该属性

方法调用

Callback

回调形式需调用 showImagePicker 方法:

import SyanImagePicker from 'rn_async_image_picker';

SyanImagePicker.showImagePicker(options, (err, selectedPhotos) => {
  if (err) {
    // 取消选择
    return;
  }
  // 选择成功,渲染图片
  // ...
})

Promise

非回调形式则使用 asyncShowImagePicker 方法:

import SyanImagePicker from 'rn_async_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();

Keywords

FAQs

Last updated on 22 Mar 2019

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc