Подтвердить что ты не робот

Как сохранить фотографию с помощью 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];
    }
}

С наилучшими пожеланиями,

а.

4b9b3361

Ответ 1

При настройке kCGImagePropertyOrientation вам необходимо сопоставить значения UIImageOrientation с соответствующими значениями ориентации EXIF. Это сопоставление:

UIImageOrientationUp:             1
UIImageOrientationDown:           3
UIImageOrientationLeft:           8
UIImageOrientationRight:          6
UIImageOrientationUpMirrored:     2
UIImageOrientationDownMirrored:   4
UIImageOrientationLeftMirrored:   5
UIImageOrientationRightMirrored:  7

Обратите внимание, что UIImageOrientationLeft и UIImageOrientationRight противоположны тому, что вы можете ожидать от документации; маленькие образцы изображений - это то, что вы получаете, если вы применяете ориентацию к вертикальному изображению, а не ориентацию необработанных данных изображения, которые при вертикальном изображении будут иметь вертикальное изображение.