SwiftExif is a wrapping library for libexif and libiptcdata for Swift to provide a JPEG metadata extraction on Linux and macOS.
SwiftExif was written to facilitate porting the Munin image gallery generator to run on both Linux and macOS (it previously required ImageIO/CoreGraphics).
libexif is used to extract and format the EXIF data from the image, while libiptcdata extracts the "newer" IPTC standard.
- Linux (Ubuntu 20.10 tested) or macOS (10.15 tested)
- Swift 5.2 (or newer)
- libexif 0.6.22 (available in Homebrew or Ubuntu 20.10)
- libiptcdata 1.0.4
On Ubuntu/Debian based Linux:
apt install -y libiptc-data libexif-dev libiptcdata0-dev
On macOS using brew:
brew install libexif libiptcdata
Add SwiftExif to your dependencies:
dependencies: [
.package(url: "https://github.com/kradalby/SwiftExif.git", from: "0.0.x"),
]
SwiftExif aims to provide some simple helper functions that essentially returns all the data as dictionaries.
For example:
import SwiftExif
// Read a JPEG file and return an Image object
// Note: current error behaviour is to return empty dictionaries, no error is thrown.
let exifImage = SwiftExif.Image(imagePath: fileURL)
// Get a [String : [String : String]] dictionary. The first dictionary has items
// from the spec e.g. 0, 1, EXIF, GPS...
// The values are returned in "human readable format".
let exifDict = exifImage.Exif()
// Get a [String : [String : String]] dictionary. The first dictionary has items
// from the spec e.g. 0, 1, EXIF, GPS...
// The values are returned in a "raw" format.
let exifRawDict = exifImage.ExifRaw()
// Get a [String : Any] dictionary.
// Most items are String, however "Keywords" are [String]
let iptcDict = exifImage.Iptc()
In addition to the high-level functions, a set of lower-level functions is available in the different classes. Have a look at the code or the unit tests to see what else you can do.