Как сохранить фотографию с помощью EXIF (GPS) и ориентации на iPhone?
Я использую writeImageToSavedPhotosAlbum:metadata:completionBlock: для сохранения изображений в рулоне камеры (данные GPS передаются в словаре в метаданные). Однако картинки дезориентированы (поскольку я переворачиваю устройство во время съемки).
Есть еще одна функция writeImageToSavedPhotosAlbum: orientation: completionBlock: но я не смогу передавать данные EXIF.
В соответствии с документацией существует свойство kCGImagePropertyOrientation для установки ориентации вручную, но у меня возникают проблемы с обнаружением текущей ориентации устройства во время снимая изображение и сохраняя его.
Кто-нибудь добился сохранения изображения с данными EXIF и правильной ориентацией? Любая помощь будет очень оценена.
Здесь мой код:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[self dismissModalViewControllerAnimated:YES];
[imageView setImage:image];
if(sourceCamera) {
//EXIF and GPS metadata dictionary
(...)
//saving image
ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init];
[al writeImageToSavedPhotosAlbum:[image CGImage]
metadata:dict
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error == nil) {
NSLog(@"saved");
} else {
NSLog(@"error");
}
}];
[al release];
}
}
С наилучшими пожеланиями,
а.
Ответы
Ответ 1
При настройке kCGImagePropertyOrientation
вам необходимо сопоставить значения UIImageOrientation с соответствующими значениями ориентации EXIF. Это сопоставление:
UIImageOrientationUp: 1
UIImageOrientationDown: 3
UIImageOrientationLeft: 8
UIImageOrientationRight: 6
UIImageOrientationUpMirrored: 2
UIImageOrientationDownMirrored: 4
UIImageOrientationLeftMirrored: 5
UIImageOrientationRightMirrored: 7
Обратите внимание, что UIImageOrientationLeft и UIImageOrientationRight противоположны тому, что вы можете ожидать от документации; маленькие образцы изображений - это то, что вы получаете, если вы применяете ориентацию к вертикальному изображению, а не ориентацию необработанных данных изображения, которые при вертикальном изображении будут иметь вертикальное изображение.