The document discusses different types of images in iOS including UIImage, CGImage, and CIImage. UIImage is used for displaying images, CGImage is a bitmap representation, and CIImage is not an actual image but a "recipe" used for image processing. Core Image filters are much faster than Core Graphics for operations like resizing since CIImage uses lazy evaluation. CGImage is sufficient for simple single modifications while CIImage works better for filters, infinite images, and GPU processing.
6. UIGraphicsBeginImageContext(originalImage
.size)
let drawSize = CGSize(width: width * 5,
height: height * 5)
let drawRect = CGRect(origin: .zero,
size: drawSize)
originalImage.draw(in: drawRect)
let image =
UIGraphicsGetImageFromCurrentImageContext
()
UIGraphicsEndImageContext()
5
WHICH IS FASTER?
let ciImage = CIImage(image:
originalImage)!
let transform = CGAffineTransform(scaleX:
5, y: 5)
let scaled = ciImage.transformed(by:
transform)
let targetRect = CGRect(origin: .zero,
size: originalImage.size)
let cropped = scaled.cropped(to:
targetRect)
let image = UIImage(ciImage: cropped)
7. 5
WHICH IS FASTER?
0.001 sec / 100 loops0.057 sec / 100 loops
UIGraphicsBeginImageContext(originalImage
.size)
let drawSize = CGSize(width: width * 5,
height: height * 5)
let drawRect = CGRect(origin: .zero,
size: drawSize)
originalImage.draw(in: drawRect)
let image =
UIGraphicsGetImageFromCurrentImageContext
()
UIGraphicsEndImageContext()
let ciImage = CIImage(image:
originalImage)!
let transform = CGAffineTransform(scaleX:
5, y: 5)
let scaled = ciImage.transformed(by:
transform)
let targetRect = CGRect(origin: .zero,
size: originalImage.size)
let cropped = scaled.cropped(to:
targetRect)
let image = UIImage(ciImage: cropped)
8. 5
WHICH IS FASTER?
0.001 sec / 100 loops0.057 sec / 100 loops
UIGraphicsBeginImageContext(originalImage
.size)
let drawSize = CGSize(width: width * 5,
height: height * 5)
let drawRect = CGRect(origin: .zero,
size: drawSize)
originalImage.draw(in: drawRect)
let image =
UIGraphicsGetImageFromCurrentImageContext
()
UIGraphicsEndImageContext()
let ciImage = CIImage(image:
originalImage)!
let transform = CGAffineTransform(scaleX:
5, y: 5)
let scaled = ciImage.transformed(by:
transform)
let targetRect = CGRect(origin: .zero,
size: originalImage.size)
let cropped = scaled.cropped(to:
targetRect)
let image = UIImage(ciImage: cropped)
9. Although a CIImage object has image data associated with it, it is not an image.
You can think of a CIImage object as an image ¡°recipe.¡± A CIImage object has
all the information necessary to produce an image, but Core Image doesn¡¯t
actually render an image until it is told to do so. This lazy evaluation allows Core
Image to operate as efficiently as possible.
but a recipe
CIIMAGE IS NOT AN IMAGE
Source: https://developer.apple.com/documentation/coreimage/ciimage
11. UIGraphicsBeginImageContext(originalImage
.size)
let drawSize = CGSize(width: width * 5,
height: height * 5)
let drawRect = CGRect(origin: .zero,
size: drawSize)
originalImage.draw(in: drawRect)
let image =
UIGraphicsGetImageFromCurrentImageContext
()
UIGraphicsEndImageContext()
5
CORRECTED COMPARISON
let ciImage = CIImage(image:
originalImage)!
let transform = CGAffineTransform(scaleX:
5, y: 5)
let scaled = ciImage.transformed(by:
transform)
let targetRect = CGRect(origin: .zero,
size: originalImage.size)
let cropped = scaled.cropped(to:
targetRect)
let image = UIImage(cgImage:
ciContext.createCGImage(cropped, from:
cropped.extent)!)
0.207 sec / 100 loops0.057 sec / 100 loops
12. If you are displaying or processing your image primarily as a CGImage or
UIImage, with no additional Core Image application, consider cropping in Core
Graphics using the cropping(to:) function to save processing overhead from
conversion of images to CIImage. It makes most sense to use cropped(to:) when
you already have CIImage in your pipeline.
to save processing overhead
AVOID CONVERSION OF IMAGE
Source: https://developer.apple.com/documentation/coreimage/ciimage/1437833-cropped
21. ¡ñ CGImage is bitmap, CIImage is recipe
¡ñ CoreGraphics is enough for easy single modification
¡ñ Avoid conversion as much as possible
subtitle
CONCLUSION