Photo Editing Extensions are a powerful way for apps to integrate with the system Photos app. Users can begin editing a photo, jump into a third-party extension, and return seamlessly back to the system editing interface. Let's try making one.
We begin by adding a new Photo Editing Extension target to our project.
Our extension will use CoreImage (covered in Bite #32) to convert a photo to black and white. The basic workflow goes like this:
- User launches our extension while editing inside Photos.app
- a
PHContentEditingInput
object is handed to us via the startContentEditingWithInput... function - User performs the edits they would like using our view controller
- User taps Done button (provided by the system)
- System asks us for a
PHContentEditingOutput
object containing our changes to the image viafinishContentEditingWithCompletionHandler
.
Let's move on to the code.
Along with the input object, we also receive a placeholderImage
which we'll use as the initial image in our own image view.
func startContentEditingWithInput(contentEditingInput: PHContentEditingInput?, placeholderImage: UIImage) {
input = contentEditingInput
imageView.image = placeholderImage
}
After processing, we create an output using the intial input object we were handed, and write our modified image to it's content URL.
let output = PHContentEditingOutput(contentEditingInput: input)
processedImageData.writeToURL(
output.renderedContentURL,
atomically: true
)
Lastly, we describe our adjustments, so we can be a good citizen in Photos.app's non-destructive editing world.
output.adjustmentData = PHAdjustmentData(
formatIdentifier: NSBundle.mainBundle().bundleIdentifier!,
formatVersion: "1.0",
data: "Grayscale".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
)
Download the complete project here: j.mp/bite058