Paparazzo 5.0.0

Paparazzo 5.0.0

Andrey YutkinTimofey Khomutnikov 维护。



 
依赖
JNWSpringAnimation>= 0
ImageSource/Core= 3.0.2
ImageSource/PHAsset= 3.0.2
ImageSource/Local= 3.0.2
ImageSource/Remote= 3.0.2
 

Paparazzo 5.0.0

  • 作者
  • Andrey Yutkin

概述

Version License Build Status

Paparazzo 是一个用于选择和编辑照片的组件。

关键功能
📷 使用相机拍照
📱 从用户的相册中选择照片
✂️ 照片裁剪和旋转
💧 将滤镜应用于照片

Demo

内容

安装

使用 CocoaPods 安装 Paparazzo 有两种选择。

使用 Marshroute

pod "Paparazzo"

或者如果您不使用 Marshroute,并且愿意不将其他依赖项添加为依赖

pod "Paparazzo/Core"

使用方法

您可以使用整个模块或仅使用照片库。

演示整个模块

使用 Paparazzo.AssemblyFactory (或者如果您使用 Marshroute,则使用 Paparazzo.MarshrouteAssemblyFactory) 来初始化模块组装。

let factory = Paparazzo.AssemblyFactory()
let assembly = factory.mediaPickerAssembly()

使用组装的 module 方法创建视图控制器

let data = MediaPickerData(
    items: items,
    autocorrectionFilters: filters,
    selectedItem: items.last,
    maxItemsCount: maxItemsCount,
    cropEnabled: true,
    autocorrectEnabled: true,
    cropCanvasSize: cropCanvasSize
)

let viewController = assembly.module(
    data: data,
    routerSeed: routerSeed,    // omit this parameter if you're using Paparazzo.AssemblyFactory
    configure: configure
)

方法参数

  • items — 当模块呈现时应该初始选择的图片数组。
  • filters — 可以应用于图片的筛选器数组。
  • selectedItem — 选择的图片。如果设置为 nil 或如果 items 不包含具有匹配 identifier 的图片,则将选择数组中的第一张图片。
  • maxItemsCount — 用户允许选择的图片的最大数量。
  • cropEnabled — 表示用户是否可以执行图片裁剪的布尔标志。
  • autocorrectEnabled — 表示用户是否可以将滤镜应用于图片的布尔标志。
  • cropCanvasSize — 裁剪图片时画布的最大尺寸。(参见 内存限制
  • routerSeed — Marshroute 提供的 routerSeed。
  • configure — 允许您提供 模块的附加参数 的闭包。

MediaPicker 模块的附加参数

附加参数在 MediaPickerModule 协议中描述。

  • setContinueButtonTitle(_:)setContinueButtonEnabled(_:)setContinueButtonVisible(_:)setContinueButtonStyle(_:) 允许自定义“继续”按钮文本和可用性。
  • setAccessDeniedTitle(_:)setAccessDeniedMessage(_:)setAccessDeniedButtonTitle(_:) 允许自定义“访问被拒绝”视图的文本。
  • set_crop_mode(_:) 允许自定义图片裁剪行为。
  • onItemsAdd 在用户从照片库选择图片或使用相机拍摄新图片时被调用。
  • onItemUpdate 在用户完成裁剪后被调用。
  • onItemAutocorrect 在应用滤镜后被调用。
  • onItemMove 在移动图片后被调用。
  • onItemRemove 在用户删除图片时被调用。
  • onFinishonCancel 分别在用户点击“继续”和“关闭”时被调用。

裁剪图片时的内存限制

当在低内存容量的设备上裁剪照片时,由于内存警告,您的应用可能会崩溃。这是因为在实际裁剪之前,我们需要将原始照片的位图放入内存中。为了降低旧设备(如iPhone 4或4s)崩溃的风险,我们可以在事先缩放源照片,使其在内存中占用更少空间。这里用到的是 cropCanvasSize,它指定了缩放时应该针对的照片大小。

展示相册

使用 Paparazzo.AssemblyFactory(如果您使用 Marshroute 则使用 Paparazzo.MarshrouteAssemblyFactory)初始化模块组件

let factory = Paparazzo.AssemblyFactory()
let assembly = factory.photoLibraryAssembly()

使用组装的 module 方法创建视图控制器

let viewController = assembly.module(
    selectedItems: selectedItems,
    maxSelectedItemsCount: maxSelectedItemsCount,
    routerSeed: routerSeed,    // omit this parameter if you're using Paparazzo.AssemblyFactory
    configure: configure
)
  • selectedItems — 预选照片(或 nil)。
  • maxItemsCount — 用户允许选择的图片的最大数量。
  • routerSeed — Marshroute 提供的 routerSeed。
  • configure — 闭包,用于提供额外的模块设置。

展示蒙版裁剪器

MaskCropper 是一个模块,提供了简单的自定义裁剪体验。请参考 CroppingOverlayProvider 协议以获得更多详细信息。

使用 Paparazzo.AssemblyFactory(如果您使用 Marshroute 则使用 Paparazzo.MarshrouteAssemblyFactory)初始化模块组件

let factory = Paparazzo.AssemblyFactory()
let assembly = factory.maskCropperAssembly()

使用组装的 module 方法创建视图控制器

let data = MaskCropperData(
    imageSource: photo.image,
    cropCanvasSize: cropCanvasSize
)
let viewController = assembly.module(
    data: data,
    croppingOverlayProvider: croppingOverlayProvider,
    routerSeed: routerSeed,    // omit this parameter if you're using Paparazzo.AssemblyFactory
    configure: configure
)
  • imageSource — 需要裁剪的照片。
  • croppingOverlayProvider — 来自 CroppingOverlayProvidersFactory 的提供者。
  • routerSeed — Marshroute 提供的 routerSeed。
  • configure — 闭包,用于提供额外的模块设置。

展示扫描器

Scanner 是一个模块,提供处理实时摄像头流的方式。请参考 ScannerOutputHandler 协议以获得更多详细信息。

Demo

使用 Paparazzo.AssemblyFactory(如果您使用 Marshroute 则使用 Paparazzo.MarshrouteAssemblyFactory)初始化模块组件

let factory = Paparazzo.AssemblyFactory()
let assembly = factory.scannerAssembly()

使用组装的 module 方法创建视图控制器

let data = ScannerData(
    initialActiveCameraType: .back,
    cameraCaptureOutputHandlers: []
)
let viewController = assembly.module(
    data: data,
    routerSeed: routerSeed,    // omit this parameter if you're using Paparazzo.AssemblyFactory
    configure: configure
)
  • initialActiveCameraType — 启动模块时首选的摄像头(前或后 FaceTime Camera)。
  • cameraCaptureOutputHandlers — 确认 ScannerOutputHandler 协议的处理程序数组。
  • routerSeed — Marshroute 提供的 routerSeed。
  • configure — 闭包,用于提供额外的模块设置。

UI 自定义

您可以为照片选择器中的颜色、字体和图标进行自定义。只需将一个 PaparazzoUITheme 实例传递给组件工厂的初始化器。

var theme = PaparazzoUITheme()
theme.shutterButtonColor = .blue
theme.accessDeniedTitleFont = .boldSystemFont(ofSize: 17)
theme.accessDeniedMessageFont = .systemFont(ofSize: 17)
theme.accessDeniedButtonFont = .systemFont(ofSize: 17)
theme.cameraContinueButtonTitleFont = .systemFont(ofSize: 17)
theme.cancelRotationTitleFont = .boldSystemFont(ofSize: 14)

let assemblyFactory = Paparazzo.AssemblyFactory(theme: theme)

ImageSource

用户通过 Paparazzo 拍摄的照片作为 MediaPickerItem(使用 MediaPicker 模块时)或 PhotoLibraryItem(使用 PhotoLibrary 模块时)提供。这两个实体都是围绕协议 ImageSource 的包装,该协议允许您获取不同的图像表示,无论其来源如何。要了解如何使用它,请访问https://github.com/avito-tech/ImageSource

本地化

您可以在以下位置查看支持的语言列表 这里。如果没看到您想用的语言,我们鼓励您通过创建添加 Localizable.strings 文件的手动请求来为项目做出贡献。

如果您对 Paparazzo 提供的字符串不满意,您可以在项目中覆盖它们。只需将 Paparazzo.strings 添加到主包中。仅覆盖您需要的字符串(您可以在 PaparazzoExample 项目中看到这个示例)。

许可

MIT