What do I need to do to save an image my program has generated (possibly from the camera, possibly not) to the system photo library on the iPhone?
What do I need to do to save an image my program has generated (possibly from the camera, possibly not) to the system photo library on the iPhone?
You can use this function:
UIImageWriteToSavedPhotosAlbum(UIImage *image,
id completionTarget,
SEL completionSelector,
void *contextInfo);
You only need completionTarget, completionSelector and contextInfo if you want to be notified when the UIImage is done saving, otherwise you can pass in nil.
See the official documentation for UIImageWriteToSavedPhotosAlbum().
Swift 4
func writeImage(image: UIImage) {
UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.finishWriteImage), nil)
}
@objc private func finishWriteImage(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
if (error != nil) {
// Something wrong happened.
print("error occurred: \(String(describing: error))")
} else {
// Everything is alright.
print("saved success!")
}
}
For Swift 5.0
I used this code to copy images to photo albums my application had created; When I want to copy images files I call "startSavingPhotoAlbume()" function. First I get UIImage from App folder then save it to photo albums. Because it is irrelevant I dont show how to read image from App folder.
var saveToPhotoAlbumCounter = 0
func startSavingPhotoAlbume(){
saveToPhotoAlbumCounter = 0
saveToPhotoAlbume()
}
func saveToPhotoAlbume(){
let image = loadImageFile(fileName: imagefileList[saveToPhotoAlbumCounter], folderName: folderName)
UIImageWriteToSavedPhotosAlbum(image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
@objc func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
if (error != nil) {
print("ptoto albume savin error for \(imageFileList[saveToPhotoAlbumCounter])")
} else {
if saveToPhotoAlbumCounter < imageFileList.count - 1 {
saveToPhotoAlbumCounter += 1
saveToPhotoAlbume()
} else {
print("saveToPhotoAlbume is finished with \(saveToPhotoAlbumCounter) files")
}
}
}