Swift version: 5.6
If you've generated an image using Core Graphics, or perhaps rendered part of your layout, you might want to save that out as either a PNG or a JPEG. Both are easy thanks to two methods: pngData()
and jpegData()
, both of which convert a UIImage
into a Data
instance you can write out.
Here's an example:
if let image = UIImage(named: "example.png") {
if let data = image.pngData() {
let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
try? data.write(to: filename)
}
}
That call to getDocumentsDirectory()
is a little helper function I include in most of my projects, because it makes it easy to locate the user's documents directory where you can save app files. Here it is:
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
If you want to save your image as a JPEG rather than a PNG, use this code instead:
if let image = UIImage(named: "example.jpg") {
if let data = image.jpegData(compressionQuality: 0.8) {
let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
try? data.write(to: filename)
}
}
The parameter to jpegData()
is a float that represents JPEG quality, where 1.0 is highest and 0.0 is lowest.
SPONSORED An iOS conference hosted in Buenos Aires, Argentina – join us for the third edition from November 29th to December 1st!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 2.0 – see Hacking with Swift tutorial 10
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.