'How to add a photos metadata to a phototaken objective-c
I'm trying to add a photos metadata to a UIImage photoTaken but can't seem to get the below code to work. All I'm really needing is the photos location so when looking at the photo in gallery it shows on the map.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
NSString *albumName = @"GoKaart!!";
UIImage *photoTaken = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
UIImage *imageMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"];
if([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage])
{
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
void (^saveBlock)(PHAssetCollection *assetCollection) = ^void(PHAssetCollection *assetCollection) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:photoTaken];
PHAssetChangeRequest *assetChangeRequestMetadata = [PHAssetChangeRequest creationRequestForAssetFromImage:imageMetadata];
PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
[assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]];
[assetCollectionChangeRequest addAssets:@[[assetChangeRequestMetadata placeholderForCreatedAsset]]];
} completionHandler:^(BOOL success, NSError *error) {
if (!success) {
NSLog(@"Error creating asset: %@", error);
}
}];
};
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"localizedTitle = %@", albumName];
PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions];
if (fetchResult.count > 0) {
saveBlock(fetchResult.firstObject);
} else {
__block PHObjectPlaceholder *albumPlaceholder;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:albumName];
albumPlaceholder = changeRequest.placeholderForCreatedAssetCollection;
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
PHFetchResult *fetchResults = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[albumPlaceholder.localIdentifier] options:nil];
if (fetchResults.count > 0) {
saveBlock(fetchResults.firstObject);
}
} else {
NSLog(@"Error creating album: %@", error);
}
}];
}
}
}
[picker dismissViewControllerAnimated:YES completion:NULL];
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
