0

メソッド writeImageToSavedPhotosAlbum:metadata:completionBlock: 撮影した写真をフォト アルバムに保存します。コードは次のとおりです。

-(void)savePhotoToAlbum{    
   CGImageRef imageRef=[imageView image].CGImage;

NSDictionary *currentDic=[self getLocation];
NSDictionary *metadata=[NSDictionary dictionaryWithDictionary:currentDic];

ALAssetsLibrary *library=[[ALAssetsLibrary alloc] init];

[library writeImageToSavedPhotosAlbum:imageRef metadata:metadata completionBlock:^(NSURL *assetURL,NSError *error){
   if(error == nil) 
    {
        UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:nil message:@"Save success!" delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    } 
    else 
    {
        UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:nil message:@"Save failure!" delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }
}];
[library release];

ユーザーの現在地を取得するメソッド getLocation !これで成功を保存できます!次に、UIImagePickerController を使用して、フォト アルバムから撮影した写真を選びたいと思います! コードは次のとおりです。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{   if([picker sourceType]==UIImagePickerControllerSourceTypeSavedPhotosAlbum)//picker image delegate
    {
        NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];
        if([mediaType isEqualToString:@"public.image"])
        {
            NSDictionary *metadata=[info objectForKey:UIImagePickerControllerMediaMetadata];
            NSLog(@"%@",metadata);
            }
    }
}

次に、メタデータが null であることをログに記録します。保存したメタデータ情報を取得するにはどうすればよいですか?ありがとう!

4

2 に答える 2

0

画像のメタデータは、sourceType が UIImagePickerControllerSourceTypeCamera の場合にのみ使用できます。

参考文献を参照してください。そのページの最後の段落を見てください。

于 2011-07-28T06:19:45.037 に答える
0

AssetsLibrary フレームワークでメタデータのログを取得できます。

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
...
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString*)kUTTypeImage]) {
    NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
    if (url) {
        ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) {
            CLLocation *location = [myasset valueForProperty:ALAssetPropertyLocation];

            NSLog(@"\n\n\n____________________________\n");
            NSLog(@"ORIENTATION: %@\n",[myasset valueForProperty:ALAssetPropertyOrientation]);
            NSLog(@"LOCATION: %@\n",[myasset valueForProperty:ALAssetPropertyLocation]);
            NSLog(@"DATE: %@\n",[myasset valueForProperty:ALAssetPropertyDate]);
            NSLog(@"Duration: %@\n",[myasset valueForProperty:ALAssetPropertyDuration]);
            NSLog(@"TYPE: %@\n",[myasset valueForProperty:ALAssetPropertyType]);
            NSLog(@"\n____________________________\n\n\n");

                            //take coordinates only
            CLLocationCoordinate2D coordinate = [location coordinate];
            strCoord = [NSString stringWithFormat:@"long: %f; lat: %f;", coordinate.latitude, coordinate.longitude];
            NSLog(@"%@", strCoord);
            // location contains lat/long, timestamp, etc
            // extracting the image is more tricky and 5.x beta ALAssetRepresentation has bugs!

        };
        ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) {
            NSLog(@"cant get image - %@", [myerror localizedDescription]);
        };
        ALAssetsLibrary *assetsLib = [[ALAssetsLibrary alloc] init];
        [assetsLib assetForURL:url resultBlock:resultblock failureBlock:failureblock];
    }
}
...
}
于 2011-09-21T09:44:17.640 に答える