MapleBacon alternatives and similar libraries
Based on the "Image" category.
Alternatively, view MapleBacon alternatives based on common mentions on social networks and blogs.
-
SDWebImage
Asynchronous image downloader with cache support with an UIImageView category. -
GPU Image
An open source iOS framework for GPU-based image and video processing. -
Kingfisher
A lightweight and pure Swift implemented library for downloading and caching image from the web. -
MWPhotoBrowser
A simple iOS photo and video browser with grid view, captions and selections -
FastImageCache
iOS library for quickly displaying images while scrolling. -
GPUImage2
GPUImage 2 is a BSD-licensed Swift framework for GPU-accelerated video and image processing. -
TOCropViewController
A view controller that allows users to crop UIImage objects. -
PINRemoteImage
A thread safe, performant, feature rich image fetcher. -
YYWebImage
Asynchronous image loading framework (supports WebP, APNG, GIF). -
RSKImageCropper
An image cropper for iOS like in the Contacts app with support for landscape orientation. -
AspectFillFaceAware
An extension that gives UIImageView the ability to focus on faces within an image when using AspectFill. -
SKPhotoBrowser
Simple PhotoBrowser/Viewer inspired by facebook, twitter photo browsers written by swift -
GPUImage3
GPUImage 3 is a BSD-licensed Swift framework for GPU-accelerated video and image processing using Metal. -
ImageSlideshow
Swift image slideshow with circular scrolling, timer and full screen viewer. -
TLPhotoPicker
Multiple phassets picker for iOS lib. like a facebook. -
EBPhotoPages
A photo gallery for iOS with a modern feature set. Similar features as the Facebook photo browser. -
TinyCrayon
A smart and easy-to-use image masking and cutout SDK for mobile apps. -
Twitter Image Pipline
streamlined framework for fetching and storing images in an application. -
ImagePickerSheetController
ImagePickerSheetController is like the custom photo action sheet in iMessage just without the glitches. -
Lightbox
A convenient and easy to use image viewer for your iOS app. -
YUCIHighPassSkinSmoothing
An implementation of High Pass Skin Smoothing using Apple's Core Image Framework -
DFImageManager
Modern framework for fetching images from various sources. Zero config yet immense customization and extensibility. Uses NSURLSession. -
AsyncImageView
Simple extension of UIImageView for loading and displaying images asynchronously without lock up the UI. -
MetalPetal
A GPU-accelerated image/video processing framework based on Metal. -
ImageScout
A Swift implementation of fastimage. Supports PNG, GIF, and JPEG. -
CTPanoramaView
Displays spherical or cylindrical panoramas or 360-photos with touch or motion based control options. -
Paparazzo
Custom iOS camera and photo picker with editing capabilities -
ShadowImageView
ShadowImageView is a iOS 10 Apple Music style image view, help you create elegent image with shadow. -
OnlyPictures
A simple and flexible way to add source of overlapping circular pictures. -
SFSafeSymbols
Safely access Apple's SF Symbols using static typing. -
ComplimentaryGradientView
Create complementary gradients generated from dominant and prominent colors in supplied image. Inspired by Grade.js. -
AXPhotoViewer
An iPhone/iPad photo gallery viewer, useful for viewing a large (or small!) number of photos -
SimpleImageViewer
A snappy image viewer with zoom and interactive dismissal transition. -
SABlurImageView
Easily Adding Animated Blur/Unblur Effects To An Image.
Scout APM - Leading-edge performance monitoring starting at $39/month
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest. Visit our partner's website for more details.
Do you think we are missing an alternative of MapleBacon or a related project?
README
MapleBacon
Introduction
MapleBacon is a lightweight and fast Swift library for downloading and caching images.
Example
The folder Example
contains a sample projects for you to try.
Requirements
- Swift 5.1
- iOS 10.0+
- Xcode 10.2+
Installation
MapleBacon is available through CocoaPods. To install add it to your Podfile:
pod "MapleBacon"
github "JanGorman/MapleBacon"
Usage
UIImageView
The most basic usage is via an extension on UIImageView
. You pass it URL:
import MapleBacon
private var imageView: UIImageView!
func someFunc() {
let url = URL(string: "…")
imageView.setImage(with: url)
}
If you want to add a placeholder while the image is downloading you specify that like this:
func someFunc() {
let url = URL(string: "…")
imageView.setImage(with: url, placeholder: UIImage(named: "placeholder"))
}
If your backend returns images that are not optimised for display, it's good practice to downsample them. MapleBacon comes with support for downsampling via displayOptions
:
func someFunc() {
let url = URL(string: "…")
imageView.setImage(with: url, displayOptions: .downsampled)
}
Image Transformers
MapleBacon allows you to apply transformations to images and have the results cached so that you app doesn't need to perform the same work over and over. To make your own transformer, create a class conforming to the ImageTransforming
protocol. A transform can be anything you like, let's create one that applies a Core Image sepia filter:
private class SepiaImageTransformer: ImageTransforming {
// The identifier is used as part of the cache key. Make sure it's something unique
let identifier = "com.schnaub.SepiaImageTransformer"
func transform(image: UIImage) -> UIImage? {
let filter = CIFilter(name: "CISepiaTone")!
let ciImage = CIImage(image: image)
filter.setValue(ciImage, forKey: kCIInputImageKey)
filter.setValue(0.5, forKey: kCIInputIntensityKey)
let context = CIContext()
guard let outputImage = filter.outputImage,
let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else {
return image
}
// Return the transformed image which will be cached (or used by another transformer)
return UIImage(cgImage: cgImage)
}
}
You then pass this filter to MapleBacon in one of the convenience methods:
let url = URL(string: "…")
let transformer = SepiaImageTransformer()
imageView.setImage(with: url, transformer: transformer)
If you want to apply multiple transforms to an image, you can chain your transformers:
let chainedTransformer = SepiaImageTransformer()
.appending(transformer: DifferentTransformer())
.appending(transformer: AnotherTransformer())
Or if you prefer, using the custom >>>
operator:
let chainedTransformer = SepiaImageTransformer() >>> DifferentTransformer() >>> AnotherTransformer()
(Keep in mind that if you are using Core Image it might not be optimal to chain individual transformers but rather create one transformer that applies multiple CIFilter
s in one pass. See the Core Image Programming Guide.)
Caching
MapleBacon will cache your images both in memory and on disk. Disk storage is automatically pruned after a week (taking into account the last access date as well) but you can control the maximum cache time yourself too:
let oneDaySeconds: TimeInterval = 60 * 60 * 24
MapleBacon.default.maxCacheAgeSeconds = oneDaySeconds
Combine
On iOS13 and above, you can use Combine
to fetch images from MapleBacon
MapleBacon.shared.image(with: url)
.receive(on: DispatchQueue.main) // Dispatch to the right queue if updating the UI
.sink(receiveValue: { image in
// Do something with your image
})
.store(in: &subscriptions) // Hold on to and dispose your subscriptions
Migrating from 5.x
There is a small migration guide in the wiki when moving from the 5.x branch to 6.x
License
MapleBacon is available under the MIT license. See the LICENSE file for more info.
*Note that all licence references and agreements mentioned in the MapleBacon README section above
are relevant to that project's source code only.