8

最も奇妙なことが起こっています。私は、ユーザーがカメラで写真を撮るか、カメラロールから写真を選ぶかを選択できるアクションシートを持っています。UIImagePickerが選択から戻ったら、ALAssetsLibraryを使用して、写真に埋め込まれているGPS情報を判別します。カメラロールから写真を選択することは完璧に機能し、GPS情報を取得することができます。ただし、カメラで写真を撮ってもGPS情報はまったく提供されません。実際、メタデータはまったくありません。私がここで間違っていることを誰かが知っていますか?

以下のコード:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{    
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    if([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage])
    {        
        void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset)
        {
            // get images metadata
            NSDictionary *metadata = asset.defaultRepresentation.metadata;
            NSLog(@"Image Meta Data: %@",metadata);

            // get coords 
            CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
            NSLog(@"coordLat: %f , coordLon: %f", location.coordinate.latitude, location.coordinate.longitude);

            // do more here - rest of code snipped to keep this question short

    };
    NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library assetForURL:assetURL
             resultBlock:ALAssetsLibraryAssetForURLResultBlock
            failureBlock:^(NSError *error) 
            {
                // handle error 
            }];

    // rest of code snipped to keep this question short

説明したように、カメラを使用すると以下が出力されます。

2012-04-15 17:58:28.032 MyApp[511:707] Image Meta Data: (null)
2012-04-15 17:58:28.041 MyApp[511:707] coordLat: 0.000000 , coordLon: 0.000000

ただし、既存の写真を選択するか、アプリを終了して、カメラで新しい写真を撮り、アプリに戻ってカメラロールからその写真を選択すると、NSLogから次の出力が得られます。

2012-04-15 17:57:03.286 MyApp[511:707] Image Meta Data: {
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 6;
PixelHeight = 1936;
PixelWidth = 2592;
"{Exif}" =     {
    ApertureValue = "2.970854";
    BrightnessValue = "2.886456";
    ColorSpace = 1;
    ComponentsConfiguration =         (
        1,
        2,
        3,
        0
    );
    DateTimeDigitized = "2012:04:15 17:24:02";
    DateTimeOriginal = "2012:04:15 17:24:02";
    ExifVersion =         (
        2,
        2,
        1
    );
    ExposureMode = 0;
    ExposureProgram = 2;
    ExposureTime = "0.06666667";
    FNumber = "2.8";
    Flash = 24;
    FlashPixVersion =         (
        1,
        0
    );
    FocalLength = "3.85";
    ISOSpeedRatings =         (
        80
    );
    MeteringMode = 5;
    PixelXDimension = 2592;
    PixelYDimension = 1936;
    SceneCaptureType = 0;
    SensingMethod = 2;
    Sharpness = 2;
    ShutterSpeedValue = "3.9112";
    SubjectArea =         (
        1295,
        967,
        699,
        696
    );
    WhiteBalance = 0;
};
"{GPS}" =     {
    Altitude = "14.9281";
    AltitudeRef = 0;
    ImgDirection = "107.4554";
    ImgDirectionRef = T;
    Latitude = "32.7366666666667";
    LatitudeRef = N;
    Longitude = "71.679";
    LongitudeRef = W;
    TimeStamp = "21:26:20.00";
};
"{TIFF}" =     {
    DateTime = "2012:04:15 17:24:02";
    Make = Apple;
    Model = "iPhone 4";
    Orientation = 6;
    ResolutionUnit = 2;
    Software = "5.0.1";
    XResolution = 72;
    YResolution = 72;
    "_YCbCrPositioning" = 1;
};
}
2012-04-15 17:57:03.302 MyApp[511:707] coordLat: 32.7366666666667 , coordLon: -71.679

PS-ARC付きのxCode4.3を使用しています

4

2 に答える 2

13

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

写真を保存するときにこれを試してください

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeImageToSavedPhotosAlbum:image.CGImage
                                 metadata:[info objectForKey:UIImagePickerControllerMediaMetadata]
                          completionBlock:^(NSURL *assetURL, NSError *error) {
        NSLog(@"assetURL %@", assetURL);
    }];
于 2012-08-27T05:08:51.677 に答える
0

@Thanh-Cong Vo は、画像をフォト アルバムに保存する方法については正しいです。そして、写真アルバムへの画像の保存に関するアップルの文書を見てください

静止画像をユーザーのカメラ ロール アルバムに保存するに は、 imagePickerController:didFinishPickingMediaWithInfo:メソッドの本体内から UIImageWriteToSavedPhotosAlbum関数を呼び出します。ムービーをユーザーのカメラ ロール アルバムに保存するには、代わりに UISaveVideoAtPathToSavedPhotosAlbum関数を呼び出します。UIKit Function Referenceで説明されているこれらの関数は、画像または動画のみを保存します。メタデータは保存されません。

iOS 4.0 以降では、静止画像のメタデータを静止画像と共にカメラ ロールに保存できます。これを行う には、アセット ライブラリ フレームワークのwriteImageToSavedPhotosAlbum:metadata:completionBlock:メソッドを使用します。UIImagePickerControllerMediaMetadataキーの説明を参照してください 。

于 2012-08-27T06:56:28.647 に答える