Skip to content

PhanithNY/PHSingleImagePicker

Repository files navigation

PHSingleImagePicker

A low memory, single image picker wrapper that provide a significant smaller file size while also preserve high image quality.

Introduction

Image file size ≠ memory size after rendering. Eg: We have a png image with file size 3.4MB and resolution 3000x4000 File size: 3.4MB Memory size to render that image: 3000x4000x4 ~= 46MB For more info, please see WWDC2018's Video We attempt to solve both file size and memory size without sacrifice much quality.

Inspired by: • Using PHPickerViewController Images in a Memory-Efficient Waytry! Swift NYC 2019 - The Life of an Image on iOS

Requirement

If you need camera usage, please include NSCameraUsageDescription key in plist. Below iOS 14, please include NSPhotoLibraryUsageDescription key in plist.

Usage


let imagePicker = PHSingleImagePickerManager.shared
// Optional: Default is 2_000 which mean image width and height cannot reach more than 2_000
imagePicker.preferredMaxSize = 2_000
imagePicker.show(.photoLibrary, on: self) { result in
  switch result {
  case .failure(let error):
    // Show message bar here

  case .success(let value):
    let data = value.data
    let filename = value.name
    let image = UIImage(data: data)
  }
}
    

Note: Please use data in success block to upload to server instead of image?.pngData() or image?.jpegData(compressionQuality: ??) . If need to display image, we can convert that image data to image using UIImage(data: data).

Localize error message

extension PHSingleImagePickerManagerError {
  var message: String {
     switch self {
     case .downsamplingFailure:
       return "imagepicker_downsamplingFailure"
     case .noCamera:
       return "imagepicker_noCamera"
     case .noCameraPermission:
       return "imagepicker_noCameraPermission"
     case .noPhotoLibraryPermission:
       return "imagepicker_noPhotoLibraryPermission"
     case .unknown:
       return "imagepicker_unknown"
     }
   }
}

Swift Package Manager

From Xcode menu bar:

  1. File
  2. Swift Packages
  3. Add Package Dependency...
  4. Paste the repo url https://github.com/PhanithNY/PHSingleImagePicker.git

Or just drop files in Sources folder into your project.

About

A drop in single image picker.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages