Project Icon

YPImagePicker

Instagram 风格的 iOS 图片视频选择库

YPImagePicker 是一个用纯 Swift 编写的 iOS 图片和视频选择库。它提供类似 Instagram 的界面,支持从图库选择、拍照、录像等功能,还包括图片裁剪和滤镜。该库高度可定制,支持单选和多选模式,并提供灵活的配置选项。开发者可以轻松集成该库,并根据应用需求进行个性化设置。它还支持自定义相机界面、视频修剪、多语言等功能,并提供简单的API接口,易于使用。


ypimagepicker

YPImagePicker

YPImagePicker 是一个用纯 Swift 编写的类似 Instagram 的 iOS 照片/视频选择器。它功能丰富且高度可定制,以满足您应用程序的需求。

Language: Swift 5 Version Platform SPM compatible codebeat badge License: MIT GitHub tag

安装 - 配置 - 使用 - 语言 - UI自定义

快速尝试: pod repo update 然后 pod try YPImagePicker

只需几行代码就可以使用这些功能!

主要特性

🌅 图库
📷 照片
🎥 视频
✂️ 裁剪
⚡️ 闪光灯
🖼 滤镜
📁 相册
🔢 多选
📏 视频剪辑和封面选择
📐 输出图像尺寸
以及更多...

安装

使用 CocoaPods

首先确保运行 pod repo update 以获取最新可用版本。

pod 'YPImagePicker' 添加到您的 Podfile 并运行 pod install。同时在 Podfile 中添加 use_frameworks!

target 'MyApp'
pod 'YPImagePicker'
use_frameworks!

使用 Swift Package Manager

通过 File > Swift Pakcages > Add Package Dependency... 打开 SPM 依赖管理器。

并插入存储库 URL:

https://github.com/Yummypets/YPImagePicker.git

要在自己的包中添加依赖项,只需在 Package.swift 的依赖项中指定一个包:

.package(
name: "YPImagePicker",
url: "https://github.com/Yummypets/YPImagePicker.git",
.upToNextMajor(from: "5.0.0")
)

注意:这需要最低目标 iOS 版本为 12.0

Plist 条目

为了让您的应用访问相机和照片库, 您需要添加这些 plist 条目

  • Privacy - Camera Usage Description(照片/视频)
  • Privacy - Photo Library Usage Description(图库)
  • Privacy - Microphone Usage Description(视频)
<key>NSCameraUsageDescription</key>
<string>您的描述</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>您的描述</string>
<key>NSMicrophoneUsageDescription</key>
<string>您的描述</string>

配置

所有配置端点都在 YPImagePickerConfiguration 结构体中。 以下是默认值供参考,请随意尝试 :)

var config = YPImagePickerConfiguration()
// [在这里编辑配置...]
// 用您的配置构建选择器
let picker = YPImagePicker(configuration: config)

常规

config.isScrollToChangeModesEnabled = true
config.onlySquareImagesFromCamera = true
config.usesFrontCamera = false
config.showsPhotoFilters = true
config.showsVideoTrimmer = true
config.shouldSaveNewPicturesToAlbum = true
config.albumName = "DefaultYPImagePickerAlbumName"
config.startOnScreen = YPPickerScreen.photo
config.screens = [.library, .photo]
config.showsCrop = .none
config.targetImageSize = YPImageSize.original
config.overlayView = UIView()
config.hidesStatusBar = true
config.hidesBottomBar = false
config.hidesCancelButton = false
config.preferredStatusBarStyle = UIStatusBarStyle.default
config.bottomMenuItemSelectedColour = UIColor(r: 38, g: 38, b: 38)
config.bottomMenuItemUnSelectedColour = UIColor(r: 153, g: 153, b: 153)
config.filters = [DefaultYPFilters...]
config.maxCameraZoomFactor = 1.0
config.fonts..

config.library.options = nil
config.library.onlySquare = false
config.library.isSquareByDefault = true
config.library.minWidthForItem = nil
config.library.mediaType = YPlibraryMediaType.photo
config.library.defaultMultipleSelection = false
config.library.maxNumberOfItems = 1
config.library.minNumberOfItems = 1
config.library.numberOfItemsInRow = 4
config.library.spacingBetweenItems = 1.0
config.library.skipSelectionsGallery = false
config.library.preselectedItems = nil
config.library.preSelectItemOnMultipleSelection = true

视频

config.video.compression = AVAssetExportPresetHighestQuality
config.video.fileType = .mov
config.video.recordingTimeLimit = 60.0
config.video.libraryTimeLimit = 60.0
config.video.minimumTimeLimit = 3.0
config.video.trimmerMaxDuration = 60.0
config.video.trimmerMinDuration = 3.0

画廊

config.gallery.hidesRemoveButton = false

默认配置

// 为所有选择器设置默认配置
YPImagePickerConfiguration.shared = config

// 然后像这样使用默认配置:
let picker = YPImagePicker()

在iPad上显示选择器时,选择器只支持一种尺寸,你应该在显示之前设置它:

let preferredContentSize = CGSize(width: 500, height: 600);
YPImagePickerConfiguration.widthOniPad = preferredContentSize.width;

// 现在你可以在对话框、弹出窗口等中以首选尺寸显示选择器

使用方法

首先要导入 import YPImagePicker

选择器只有一个回调 didFinishPicking,使你能够处理所有情况。让我们看一些典型的使用案例 🤓

单张照片

let picker = YPImagePicker()
picker.didFinishPicking { [unowned picker] items, _ in
    if let photo = items.singlePhoto {
        print(photo.fromCamera) // 图像来源(相机或图库)
        print(photo.image) // 用户最终选择的图像
        print(photo.originalImage) // 用户选择的原始图像,未经过滤
        print(photo.modifiedImage) // 转换后的图像,可能为nil
        print(photo.exifMeta) // 打印原始图像的exif元数据
    }
    picker.dismiss(animated: true, completion: nil)
}
present(picker, animated: true, completion: nil)

单个视频

// 在这里我们配置选择器只显示视频,不显示照片
var config = YPImagePickerConfiguration()
config.screens = [.library, .video]
config.library.mediaType = .video

let picker = YPImagePicker(configuration: config)
picker.didFinishPicking { [unowned picker] items, _ in
    if let video = items.singleVideo {
        print(video.fromCamera)
        print(video.thumbnail)
        print(video.url)
    }
    picker.dismiss(animated: true, completion: nil)
}
present(picker, animated: true, completion: nil)

如你所见,singlePhotosingleVideo 辅助方法可以帮助你处理单一媒体,这在很多情况下都很常见,同时使用相同的回调来处理所有用例 \o/

多选

要启用多选,请确保在配置中设置 library.maxNumberOfItems,如下所示:

var config = YPImagePickerConfiguration()
config.library.maxNumberOfItems = 3
let picker = YPImagePicker(configuration: config)

然后你可以在同一个回调中处理多选:

picker.didFinishPicking { [unowned picker] items, cancelled in
    for item in items {
        switch item {
        case .photo(let photo):
            print(photo)
        case .video(let video):
            print(video)
        }
    }
    picker.dismiss(animated: true, completion: nil)
}

处理取消事件(如果需要)

picker.didFinishPicking { [unowned picker] items, cancelled in
    if cancelled {
        print("选择器被取消")
    }
    picker.dismiss(animated: true, completion: nil)
}

就是这样!

语言

🇺🇸 英语, 🇪🇸 西班牙语, 🇫🇷 法语 🇷🇺 俄语, 🇵🇱 波兰语, 🇳🇱 荷兰语, 🇧🇷 巴西葡萄牙语, 🇹🇷 土耳其语, 🇸🇾 阿拉伯语, 🇩🇪 德语, 🇮🇹 意大利语, 🇯🇵 日语, 🇨🇳 中文, 🇮🇩 印度尼西亚语, 🇰🇷 韩语, 🇹🇼 繁体中文(台湾), 🇻🇳 越南语, 🇹🇭 泰语, 🇨🇿 捷克语, 🇮🇷 波斯语。

如果你的语言不受支持,你仍然可以通过 configuration.wordings API 自定义文字:

config.wordings.libraryTitle = "图库"
config.wordings.cameraTitle = "相机"
config.wordings.next = "确定"

更好的是,你可以提交一个问题或拉取请求,附上你的 Localizable.strings 文件来添加新语言!

UI 自定义

我们尽量保持原生风格,所以这主要通过原生API实现。

导航栏颜色

let coloredImage = UIImage(color: .red)
UINavigationBar.appearance().setBackgroundImage(coloredImage, for: UIBarMetrics.default)
// UIImage+color 辅助方法 https://stackoverflow.com/questions/26542035/create-uiimage-with-solid-color-in-swift

导航栏字体

let attributes = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 30, weight: .bold) ]
UINavigationBar.appearance().titleTextAttributes = attributes // 标题字体
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, for: .normal) // 导航栏按钮字体

导航栏文字颜色

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.yellow ] // 标题颜色
UINavigationBar.appearance().tintColor = .red // 左侧导航栏按钮
config.colors.tintColor = .green // 右侧导航栏按钮(操作)

原始项目与作者

这个项目最初受到 Fusuma 的启发 考虑到大量的代码、设计变更以及随时间添加的所有额外功能,这个项目从一个分支演变成了一个独立的单独仓库,也是为了便于发现。 原始 Fusuma 作者是 ytakz

核心团队

## 贡献者 🙏 [ezisazis](https://github.com/ezisazis)、 [hanikeddah](https://github.com/hanikeddah)、 [tahaburak](https://github.com/tahaburak)、 [ajkolean](https://github.com/ajkolean)、 [Anarchoschnitzel](https://github.com/Anarchoschnitzel)、 [Emil](https://github.com/heitara)、 [Rafael Damasceno](https://github.com/DamascenoRafael)、 [cenkingunlugu](https://github.com/https://github.com/cenkingunlugu)、 [heitara](https://github.com/heitara)、 [portellaa](https://github.com/portellaa)、 [Romixery](https://github.com/romixery)、 [shotat](https://github.com/shotat)、 [shalamowww](https://github.com/shalamowww)

特别感谢 ihtiht 设计的酷炫logo!

以各种方式帮助我们的人 👏

userdarEvgeniyMehdiMahdlooom-hauserdarChintanWeappeddieespinalviktorgardartgdelarosacwestMobileTinyikVivekthakur647tomasbykowskiartemsmikhtheolofdongdong3344MHX792CIronfoundersonGuerrixZedd0202mohammadZ74SalmanGhumsaniwegweiser6BilalAkramKazimAhmadJustinBeBoySashaMeyerGShushanikCez95PalandosebastienboulogneJigneshParekh7165DeepakepaisaAndreiBoariunathankonrad1wawilliams003pngo-hypewellPawanManjanidevender54321Didar1994relaxsusrestoflash

依赖

YPImagePicker 依赖 prynt/PryntTrimmerView 来提供视频裁剪和封面功能。非常感谢 @HHK1 将其开源 :)

Objective-C 支持

我们不支持 Objective-C,这也不在我们的计划之内。 Swift 是未来,放弃 Objective-C 是保持这个库开发速度的必要代价 :)

许可证

YPImagePicker 基于 MIT 许可发布。 详情请查看 LICENSE

Swift 版本

  • Swift 3 -> 版本 1.2.0
  • Swift 4.1 -> 版本 3.4.1
  • Swift 4.2 -> 版本 3.5.2
  • Swift 5.0 -> 版本 4.0.0
  • Swift 5.1 -> 版本 4.1.2
  • Swift 5.3 -> 版本 4.5.0
项目侧边栏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号