2011-07-14 16 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方向値にマップする必要があります。そのマッピングは次のとおりです。UIImageOrientationLeftとUIImageOrientationRightはあなたがthe documentationから期待するかもしれないものの反対である

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

注意。小さなサンプル画像は、向きが適用されたときに直立した画像を与える生の画像データの向きではなく、直立した画像に向きを適用する場合に得られるものです。

+0

ありがとうございます、あなたは素晴らしいです! UIImageOrientation、それは簡単です... kCGImagePropertyOrientationとUIImageOrientationのための単一のソリューションを見つけることができませんでした。私はこのボードが大好き! – akashic

+0

Anomie、それは意味がありますが、OPのコードでは実際に設定を行うべきですか? OPは実際にkCGImagePropertyOrientationの値をどこかで設定しなければなりませんか? –

+3

@BenjaminWheelerはあなたの 'ALAsset'のメタデータ辞書を変更する必要があります。 'ALAsset'を取得したら、このようにしてメタデータ辞書を取得します:' myMetadataDictionary = [[myAsset defaultRepresentation] metadata] '。次に、方向を設定します: 'myMetadataDictionary [(NSString *)kCGImagePropertyOrientation] = orientation'、ここで' orientation'は上記の@Anomieで与えられた整数の1つです。 –

関連する問題