実行環境
- Swift 4.2
- Xcode 10.1
- Deployment Target 11.0
本題
PHCachingImageManager
やAVCapturePhotoCaptureDelegate
で受け取った画像データをExif情報を損なわずにJPEGファイルに保存する場合はCIImage
を使用する必要があります。
func writeToJpeg(to url: URL, data: Data) throws {
guard let image = CIImage(data: data),
let jpegData = CIContext().jpegRepresentation(
of: image,
colorSpace: image.colorSpace ?? CGColorSpaceCreateDeviceRGB(),
options: [:]) else {
// JPEGデータ作成失敗
return
}
try jpegData.write(to: url)
}
UIImage
を使用するとExif情報が失われてしまいます。
func writeToJpeg(to url: URL, data: Data) throws {
guard let image = UIImage(data: data),
let jpegData = image.jpegData(compressionQuality: 1) else {
// JPEGデータ作成失敗
return
}
try jpegData.write(to: url)
}