В настоящее время я использую кодировку base64 для преобразования и отправки нескольких изображений в файле JSON из моего приложения Swift в мой API, используя:
let imageData = image.jpegData(compressionQuality: 1.0)
let sSideL = imageData.base64EncodedString(options: .lineLength64Characters)
При расширении моего API я теперь хотел бы использовать богатые данные EXIF, предоставляемые большинством смартфонов, такие как информация об объективе, поле зрения или модель устройства . Наиболее важным для моей текущей цели является тег "Image Model"
, чтобы идентифицировать устройство, на котором был сделан снимок.
Я узнал, что в данных base64
, поступающих через мой API, остались некоторые данные EXIF, но они ограничены ориентацией и очень базовой c информацией, такой как ориентация. Также, когда я напрямую печатаю base64String в XCode и анализирую его, он имеет очень плохую информацию EXIF. Технически это должно быть возможно, потому что, преобразуя одно и то же изображение в онлайн-конвертер base64 и анализируя возвращаемую строку, я могу видеть информацию EXIF, такую как "Модель изображения" и т. Д. c.
Есть ли способ преобразовать мой UIImage в строку base64, сохраняя все детали EXIF?
API представляет основную часть моей системы, поэтому я хотел бы сделать ее максимально простой и не добавлять дополнительные параметр загрузки.
РЕДАКТИРОВАТЬ Вот мой код для захвата UIImage
extension CameraController: AVCapturePhotoCaptureDelegate {
public func photoOutput(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?, previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?,
resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Swift.Error?) {
if let error = error {
// ERROR
}
else if let buffer = photoSampleBuffer,
let data = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: buffer, previewPhotoSampleBuffer: nil),
let image = UIImage(data: data) {
// SEND IMAGE TO SERVER
}
else {
// UNKNOWN ERROR
}
}
}