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);
            }
    }
}

然后记录元数据为空。这就是为什么?以及如何获取我保存的元数据信息?谢谢!

4

2 回答 2

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 回答
0

仅当 sourceType 为 UIImagePickerControllerSourceTypeCamera 时,图像的元数据才可用。

参见参考文献。查看该页面中的最后一段。

于 2011-07-28T06:19:45.037 回答