Project Icon

react-native-image-crop-picker

React Native图像选择与处理库 支持iOS和Android平台

react-native-image-crop-picker是一个功能丰富的React Native图像处理库。支持从相册和相机选择图片和视频,提供压缩、裁剪、多选等功能。适用于iOS和Android平台,可高度定制,并提供详细文档便于集成。

react-native-image-crop-picker

Open Collective上的支持者 Open Collective上的赞助商

iOS/Android图片选择器,支持相机、视频、可配置压缩、多图选择和裁剪功能

效果

重要说明

  1. 如果您使用的是react-native >= 0.60版本,请使用react-native-image-crop-picker 0.25.0或更高版本。否则请使用0.25.0以下版本。
  2. 如果您想使用react-native-image-crop-picker 0.39.0或更高版本,您需要将Android的compileSdkVersion设置为33或更高。否则请使用react-native-image-crop-picker 0.39.0以下版本。

使用方法

导入库

import ImagePicker from 'react-native-image-crop-picker';

从图库选择

调用单图选择器并裁剪

ImagePicker.openPicker({
  width: 300,
  height: 400,
  cropping: true
}).then(image => {
  console.log(image);
});

调用多图选择器

ImagePicker.openPicker({
  multiple: true
}).then(images => {
  console.log(images);
});

仅从图库选择视频

ImagePicker.openPicker({
  mediaType: "video",
}).then((video) => {
  console.log(video);
});

Android:已知'cropping'属性可能导致在Android的图库中无法显示视频。选择视频时请不要将cropping设置为true。

从相机选择

图片

ImagePicker.openCamera({
  width: 300,
  height: 400,
  cropping: true,
}).then(image => {
  console.log(image);
});

视频

ImagePicker.openCamera({
  mediaType: 'video',
}).then(image => {
  console.log(image);
});

裁剪图片

ImagePicker.openCropper({
  path: 'my-file-path.jpg',
  width: 300,
  height: 400
}).then(image => {
  console.log(image);
});

可选的清理操作

模块会创建临时图片,这些图片将在未来某个时候自动清理。如果您想强制清理,可以使用clean来清理所有临时文件,或使用cleanSingle(path)来清理单个临时文件。

ImagePicker.clean().then(() => {
  console.log('已从临时目录中删除所有临时图片');
}).catch(e => {
  alert(e);
});

请求对象

属性类型描述
cropping布尔值(默认为false)启用或禁用裁剪
width数字cropping选项一起使用时的结果图像宽度
height数字cropping选项一起使用时的结果图像高度
multiple布尔值(默认为false)启用或禁用多图像选择
writeTempFile(仅iOS)布尔值(默认为true)设置为false时,不为选定的图像写入临时文件。当使用includeBase64选项检索文件内容且不需要从磁盘读取文件时,这对提高性能很有用。
includeBase64布尔值(默认为false)设置为true时,图像文件内容将作为base64编码的字符串在data属性中可用。提示:要将此字符串用作图像源,可以这样使用:<Image source={{uri: `data:${image.mime};base64,${image.data}`}} />
includeExif布尔值(默认为false)在响应中包含图像的Exif数据
avoidEmptySpaceAroundImage(仅iOS)布尔值(默认为true)设置为true时,图像将始终填满遮罩空间。
cropperActiveWidgetColor(仅Android)字符串(默认为"#424242"裁剪图像时,确定活动小部件的颜色。
cropperStatusBarColor(仅Android)字符串(默认为#424242裁剪图像时,确定状态栏的颜色。
cropperToolbarColor(仅Android)字符串(默认为#424242裁剪图像时,确定工具栏的颜色。
cropperToolbarWidgetColor(仅Android)字符串(默认为darker orange裁剪图像时,确定工具栏文本和按钮的颜色。
freeStyleCropEnabled布尔值(默认为false)允许用户应用自定义矩形区域进行裁剪
cropperToolbarTitle字符串(默认为Edit Photo裁剪图像时,确定工具栏的标题。
cropperCircleOverlay布尔值(默认为false)启用或禁用圆形裁剪遮罩。
disableCropperColorSetters(仅Android)布尔值(默认为false)裁剪图像时,禁用裁剪库的颜色设置器。
minFiles(仅iOS)数字(默认为1)使用multiple选项时要选择的最小文件数
maxFiles(仅iOS)数字(默认为5)使用multiple选项时要选择的最大文件数
waitAnimationEnd(仅iOS)布尔值(默认为true)Promise将在ViewController completion块被调用时解决/拒绝
smartAlbums(仅iOS)数组(支持的值)(默认为['UserLibrary', 'PhotoStream', 'Panoramas', 'Videos', 'Bursts'])可选择的智能相册列表
useFrontCamera布尔值(默认为false)打开时是否默认使用前置/"自拍"相机。请注意,并非所有Android设备都支持此参数,详见问题#1058
compressVideoPreset(仅iOS)字符串(默认为MediumQuality)选择用于视频压缩的预设
compressImageMaxWidth数字(默认无)压缩图像的最大宽度
compressImageMaxHeight数字(默认无)压缩图像的最大高度
compressImageQuality数字(默认Android为1/iOS为0.8)压缩图像的质量(从0到1,1为最佳质量)。在iOS上,大于0.8的值在大多数图像中不会产生明显的质量提升,而0.8的值与1相比,文件大小将减少约一半或更少。
loadingLabelText(仅iOS)字符串(默认为"Processing assets...")图片在选择器中加载时显示的文本
mediaType字符串(默认为any)图像选择接受的媒体类型,可以是:'photo'、'video'或'any'
showsSelectedCount(仅iOS)布尔值(默认为true)是否显示选定资产的数量
sortOrder(仅iOS)字符串(默认为'none',支持的值:'asc'、'desc'、'none')打开图像选择器时,在相册/详细照片视图中显示媒体时应用于创建日期的排序顺序
forceJpg(仅iOS)布尔值(默认为false)是否将照片转换为JPG。这也会将任何实况照片转换为其JPG表示形式
showCropGuidelines(仅Android)布尔值(默认为true)裁剪时是否在图像上方显示3x3网格
showCropFrame(仅Android)布尔值(默认为true)裁剪时是否显示裁剪框
hideBottomControls(仅Android)布尔值(默认为false)是否显示底部控件
enableRotationGesture(仅Android)布尔值(默认为false)是否启用手势旋转图像
cropperChooseText(仅iOS)字符串(默认为choose)选择按钮文本
cropperChooseColor(仅iOS)字符串(默认为#FFCC00选择按钮的十六进制格式颜色。默认颜色由TOCropViewController控制
cropperCancelText(仅iOS)字符串(默认为Cancel)取消按钮文本
cropperCancelColor(仅iOS)字符串(默认为iOS的默认色调)取消按钮的十六进制格式颜色。默认值是iOS的默认色调颜色由TOCropViewController控制
cropperRotateButtonsHidden(仅iOS)布尔值(默认为false)启用或禁用裁剪器旋转按钮

智能相册类型(iOS)

注意:某些类型可能在所有iOS版本上都不可用。请务必检查以避免问题。

['PhotoStream', 'Generic', 'Panoramas', 'Videos', 'Favorites', 'Timelapses', 'AllHidden', 'RecentlyAdded', 'Bursts', 'SlomoVideos', 'UserLibrary', 'SelfPortraits', 'Screenshots', 'DepthEffect', 'LivePhotos', 'Animated', 'LongExposure']

响应对象

属性类型描述
path字符串选中图片的位置。当writeTempFile选项设置为false时,此值为null。
localIdentifier(仅iOS)字符串选中图片的本地标识符,用于PHAsset搜索
sourceURL(仅iOS)字符串选中图片的源路径,无写入权限
filename(仅iOS)字符串选中图片的文件名
width数字选中图片的宽度
height数字选中图片的高度
mime字符串选中图片的MIME类型(image/jpeg, image/png)
size数字选中图片的大小(字节)
duration数字视频时长(毫秒)
database64可选的base64编码选中文件表示
exif对象从图片中提取的EXIF数据。响应格式取决于平台
cropRect对象裁剪后的图片矩形(宽度、高度、x、y)
creationDate (仅iOS)字符串图片创建时的UNIX时间戳
modificationDate字符串图片最后修改时的UNIX时间戳

安装

步骤1

npm i react-native-image-crop-picker --save

步骤2

iOS

cd ios
pod install

步骤3

iOS

步骤1

在Xcode中打开Info.plist,添加字符串键NSPhotoLibraryUsageDescription,其值描述为什么需要访问用户照片。更多信息请参见https://forums.developer.apple.com/thread/62229。根据您使用的功能,您可能还需要`NSCameraUsageDescription`和`NSMicrophoneUsageDescription`键。

(可选)步骤2 - 本地化相机/图库/裁剪器文本按钮

  • 打开您的Xcode项目
  • 通过在导航栏(左侧)打开项目名称进入项目设置
  • 在项目列表中选择您的项目
  • 应该在Info选项卡中,通过"+"添加Localizations中您的应用缺少的语言
  • 重新构建,现在您的应用相机和图库应该有您添加的语言的经典iOS文本。

Android

  • 非常重要build.gradle的repositories部分添加以下内容,并将Android SDK版本更改为33。(android/build.gradle)
buildscript {
    ext {
        buildToolsVersion = "31.0.0"
        minSdkVersion = 21
        compileSdkVersion = 33
        targetSdkVersion = 33
        ...
    }
}

allprojects {
    repositories {
      mavenLocal()
      jcenter()
      maven { url "$rootDir/../node_modules/react-native/android" }

      // 添加这个
      maven { url 'https://maven.google.com' }

      // 添加这个
      maven { url "https://www.jitpack.io" }
    }
}
  • 添加useSupportLibrary (android/app/build.gradle)
android {
    ...

    defaultConfig {
        ...
        vectorDrawables.useSupportLibrary = true
        ...
    }
    ...
}
  • 如果您使用的react-native-image-crop-picker版本 >= 0.35.0,最低Gradle版本要求
3.3.3
3.4.3
3.5.4
3.6.4
4.0.1

更多详细信息请参考 https://github.com/ivpusic/react-native-image-crop-picker/issues/1406

  • 如果您使用的SDK版本 >= 33,在app/src/main/AndroidManifest.xml中添加以下内容

    • <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
  • [可选] 如果您想在项目中使用相机选择器,在app/src/main/AndroidManifest.xml中添加以下内容

    • <uses-permission android:name="android.permission.CAMERA"/>
  • [可选] 如果您想使用前置摄像头,还需在app/src/main/AndroidManifest.xml中添加以下内容

    • <uses-feature android:name="android.hardware.camera" android:required="false" />
    • <uses-feature android:name="android.hardware.camera.front" android:required="false" />

待办事项

  • [Android] 标准化多选
  • [Android] 视频压缩

贡献者

本项目的存在要感谢所有做出贡献的人。[参与贡献]

支持者

感谢所有的支持者!🙏 [成为支持者]

赞助商

通过成为赞助商来支持这个项目。您的logo将会显示在这里,并链接到您的网站。[成为赞助商]

许可证

MIT

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号