Simple and zero-dependency photo picker with an elegant and customizable image editor

Simple and zero-dependency photo picker with an elegant and customizable image editor

FMPhotoPicker is a modern, simple and zero-dependency photo picker with an elegant and customizable image editor

FMPhotoPicker is a modern, simple and zero-dependency photo picker with an elegant and customizable image editor

Quick demo

Batch select/deselect Smooth transitions Filter Crop
FMPhotoPicker FMPhotoPicker FMPhotoPicker FMPhotoPicker


  • Support both single and multiple selection
  • Support batch selection/deselection by swipe gesture
  • Support preview
  • Support simple image editor with filter and cropping functions
  • Support force crop mode
  • Support rounded image preview
  • Support adding self-define cropping
  • Support adding self-define filter
  • Support video player
  • Support custom confirmation view
  • Support language customization


  • iOS 9.0+



dependencies: [
  .package(url: "", .exact("1.1.1")),


Insert the following line in your Carthfile:

git "[email protected]:congnd/FMPhotoPicker.git"

and run carthage update FMPhotoPicker


FMPhotoPicker is now available in CocoaPods You want to add pod 'FMPhotoPicker', '~> 1.1.1' similar to the following to your Podfile:

target 'MyApp' do
  pod 'FMPhotoPicker', '~> 1.1.1'

Then run a pod install inside your terminal.


Create a configuration object
var config = FMPhotoPickerConfig()

For details, see Configuration


let picker = FMPhotoPickerViewController(config: config)
picker.delegate = self
self.present(picker, animated: true)

From iOS 10, you have to add the Privacy - Photo Library Usage Description into your Info.plist file.


let editor = FMImageEditorViewController(config: config, sourceImage: image)
editor.delegate = self
self.present(editor, animated: true)

Delegation methods

  • Implement FMPhotoPickerViewControllerDelegate protocol to handle selected images
func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith photos: [UIImage])
  • Implement FMImageEditorViewControllerDelegate protocol to handle ouput image
func fmImageEditorViewController(_ editor: FMImageEditorViewController, didFinishEdittingPhotoWith photo: UIImage)


The configuration supports the following parameters:
  • mediaTypes An array that indicates the media types to be accessed by the picker controller. Type: [FMMediaType] Default: [.image, .video]

  • selectMode Photo selection mode that can be in single or multiple mode. Type: : FMSelectMode Default is multiple

  • maxImage The maximum number of images can be selected. Type: Int Default: 10

  • maxVideo The maximum number of videos can be selected. Type: Int Default is 10

  • availableFilters Filter options that are used in editor. Set this parameter to nil to make the filter menu be unavailable in the editor FMPhotoEditor provides some default filters that will be fit to you. Type: [FMFilterable]? Default: all filters are provided by FMPhotoPicker.

  • availableCrops Crop options that is used in editor. Set this parameter to nil to make the cropping menu be unavailable in the editor FMPhotoEditor provides some default crops that will be fit to you. Type: [FMCroppable]? Default: all crops provided by FMPhotoPicker.

You are not allowed to use the editor without giving it at least one crop option or one filter option

  • alertController An alert controller to show the confirmation view to an user with 2 options: Ok or Cancel. Type: FMAlertable Default: FMAlert

  • forceCropEnabled A bool value that indicates whether force mode is enabled. If true is set, only the first crop in the availableCrops is used in the editor. And that crop's ration becomes force crop ratio. Type: FMAlertable Default: false

  • eclipsePreviewEnabled A bool value that indicates whether the preview of image should be displayed in rounded image. Type: Bool Default: false

  • strings A dictionary that allows you to customize language for your app. For details, see FMPhotoPickerConfig.swift Type: Dictionary


Custom filter

You can freely create your own filter by implementing the FMFilterable protocol.

public protocol FMFilterable {
    func filter(image: UIImage) -> UIImage
    func filterName() -> String

Be careful that the filterName is used to determine whether the two filters are the same. Make sure that your filter's names are not duplicated, especially with the default filters that you want to use.

Custom cropping

Similar as filter function, FMPhotoPicker provides the capability to use your own cropping by implementing the FMCroppable protocol.

public protocol FMCroppable {
    func crop(image: UIImage, toRect rect: CGRect) -> UIImage
    func name(string: [String: String]) -> String
    func icon() -> UIImage
    func ratio() -> FMCropRatio?

The func name(strings: [String: String]) -> String will receive the strings configuration from configuration object. It allows you customize the cropping while keeping all your language setting in only one place.

The name() method is also used as identifier for the cropping. Thus, make sure you do not have any duplicate of the cropping name.

Custom alert view controller

You can use your own view style for the confirmation view by implementing the FMAlertable protocol.

public protocol FMAlertable {
    func show(in viewController: UIViewController, ok: @escaping () -> Void, cancel: @escaping () -> Void)

Download Details:

Author: congnd

Source Code:

swift ios mobile-apps

Bootstrap 5 Complete Course with Examples

Bootstrap 5 Tutorial - Bootstrap 5 Crash Course for Beginners

Nest.JS Tutorial for Beginners

Hello Vue 3: A First Look at Vue 3 and the Composition API

Building a simple Applications with Vue 3

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

Top Swift iOS App Development Company in USA

AppClues Infotech is a top Mobile App Development Company in USA building high-quality Android, iOS, and Native apps for Startups, SMBs, & Enterprises. Contact us now!

How To Succeed In Mobile App Wireframe Design?

This article covers everything about mobile app wireframe design: what to do and what not, tools used in designing a mobile or web app wireframe, and more.

How long does it take to develop/build an app?

This article covers A-Z about the mobile and web app development process and answers your question on how long does it take to develop/build an app.

Best Mobile App Development Company | Android and iOS Apps

iPrism Tech is a one of the best and offshore mobile app development company in India, Saudi Arabia and USA. We are a major providers of android, iphone and ipad mobile app development services at economical prices.

Best Swift App Development Company

Apple Swift App Development India: Mobile App Development India is an expert iOS Swift App Development company in India. We develop secure and robust mobile app solutions based on new Apple Swift language.