У меня есть iPhone и MacBook с включенной синхронизацией библиотеки фотографий. На iPhone есть фотографии, которые были скопированы в библиотеку фотографий MacBook.
Этот фрагмент кода извлекает актив в приложении iOS и печатает creationDate
:
let allPhotosOptions = PHFetchOptions()
allPhotosOptions.sortDescriptors
= [NSSortDescriptor(key: "creationDate", ascending: true)]
let allPhotos = PHAsset.fetchAssets(with: self.allPhotosOptions)
let fetchResult = PHAsset.fetchAssets(in: allPhotos, options: nil)
let asset = fetchResult.lastObject!
let creationDate = asset.creationDate!
print("creationDate: \(dateFormatter.string(from: creationDate))")
С форматом даты yyyy-MM-dd HH:mm:ss.SSSS
это печатает:
Дата создания: 2020-12-28 20:46:06.9940
Запуск одного и того же кода в macOS приводит к другому результату на одном и том же изображении:
Дата создания: 2020-12-28 20:46:09.1860
Дата выглядит почти так же, но пропускает две секунды. Я сравнил другие фотографии, идентичные между macOS и iOS, и посчитал разницу в секундах:
0,6877040863037109
0,5218453407287598
0,6767516136169434
0,32204413414001465
2,1924281120300293 (предыдущее сравнение фото)
0,972207299
Даты всегда разные, а даты фотографий iPhone новее на случайное количество миллисекунд. Я отправил предыдущее фото с iOS на macOS в виде файла для сравнения с таким же фото из библиотеки macOS. Когда я печатаю данные exif, они выглядят так же:
$ exiftool IMG_1534_iOS.JPG
Create Date : 2020:12:28 20:46:09.186-08:00
$ exiftool IMG_1534_mac.HEIC
Create Date : 2020:12:28 20:46:09.186-08:00
В качестве последнего шага я попытался распечатать exif-данные фотографии на iOS:
print("creationDate: \(dateFormatter.string(from: asset.creationDate!))")
let options = PHContentEditingInputRequestOptions()
asset.requestContentEditingInput(with: options) { input, _ in
guard let url = input?.fullSizeImageURL else { return }
guard let image = CIImage(contentsOf: url) else { return }
guard let exif = image.properties["{Exif}"] as? [String: Any] else { return }
print(exif["DateTimeOriginal"] ?? "")
print(exif["SubsecTimeDigitized"] ?? "")
}
Это печатает:
Дата создания: 2020-12-28 20:46:06.9940
2020:12:28 20:46:09
186
Это означает, что в iOS PHAsset.creationDate
отличается от данных exif, которые хранятся в этом файле PHAsset
.
Почему creationData
одной и той же фотографии на macOS и iOS разные? И почему creationData
не соответствует DateTimeOriginal
exif на iOS?