如何在iPhone上使用EXIF(GPS)和方向保存照片?

时间:2011-07-14 20:08:55

标签: iphone gps orientation exif

我正在使用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 个答案:

答案 0 :(得分:27)

设置kCGImagePropertyOrientation时,需要将UIImageOrientation值映射到相应的EXIF方向值。该映射是:

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

请注意,UIImageOrientationLeft和UIImageOrientationRight与您对the documentation的期望相反;如果将方向应用于直立图像,而不是在应用方向时将提供直立图像的原始图像数据的方向,则可以获得小样本图像。