2011-07-14 144 views
13

我正在使用writeImageToSavedPhotosAlbum:metadata:completionBlock:將圖像保存到相機膠捲(GPS數據在傳遞到元數據的字典中)。然而,圖片是錯誤的(因爲我在拍照時翻轉設備)。如何在iPhone上使用EXIF(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]; 
    } 
} 

最良好的祝願,

一個。

回答

27

設置kCGImagePropertyOrientation時,需要將UIImageOrientation值映射到相應的EXIF方向值。這映射是:

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

注意UIImageOrientationLeft和UIImageOrientationRight是你可能會從the documentation期望相反的;如果您將方向應用於直立圖像,而不是原始圖像數據的方向,那麼在應用方向時將得到直立圖像的小樣本圖像就是您所得到的。

+0

謝謝你的回答,你太棒了! UIImageOrientation,就是這麼簡單......找不到任何針對kCGImagePropertyOrientation和UIImageOrientation的單一解決方案。我只是喜歡這個板子! – akashic

+0

失態,這是有道理的,但在OP的代碼中他應該在哪裏實際設置,以及如何? OP必須在某處爲kCGImagePropertyOrientation設置一個值,對吧? –

+3

@BenjaminWheeler需要修改你的'ALAsset'元數據字典。一旦你有了'ALAsset',以這種方式獲取元數據字典:'myMetadataDictionary = [[myAsset defaultRepresentation] metadata]'。然後,設置方向:'myMetadataDictionary [(NSString *)kCGImagePropertyOrientation] = orientation',其中'orientation'是上面@Anomie給出的整數之一。 –

相關問題