ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];
[lib assetForURL:nil resultBlock:^(ALAsset *asset) {
NSDictionary *metadata = rep.metadata;
if (metadata) {
NSDictionary *GPSDict=metadata[@"{GPS}"];
NSDictionary *TIFFDict=metadata[@"{TIFF}"];
if (GPSDict){
double longitude = [[GPSDict objectForKey:@"Longitude"] doubleValue];
double latitude = [[GPSDict objectForKey:@"Latitude"] doubleValue];
if ([[GPSDict objectForKey:@"LatitudeRef"] isEqualToString:@"S"]) {
latitude = -latitude;
}
if ([[GPSDict objectForKey:@"LongitudeRef"] isEqualToString:@"W"]) {
longitude = -longitude;
}
if (TIFFDict){
NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
[pref setObject:[TIFFDict objectForKey:@"DateTime"] forKey:@"PHOTODATE"];
[pref synchronize];
}
coordinate2D = CLLocationCoordinate2DMake(latitude, longitude);
}else {
latitude = locationManager.location.coordinate.latitude;
longitude = locationManager.location.coordinate.longitude;
[GPSDictionary setObject:[NSNumber numberWithFloat:fabs(latitude)]
forKey:(NSString*)kCGImagePropertyGPSLatitude];
[GPSDictionary setObject:(latitude > 0 ? @"N": @"S") forKey:(NSString*)kCGImagePropertyGPSLatitudeRef];
[GPSDictionary setObject:[NSNumber numberWithFloat:fabs(longitude)]
forKey:(NSString*)kCGImagePropertyGPSLongitude];
[GPSDictionary setObject:(longitude > 0 ? @"E": @"W") forKey:(NSString*)kCGImagePropertyGPSLongitudeRef]; //
if (metadata&& GPSDictionary) {
[metadata setValue:GPSDictionary forKey:(NSString*)kCGImagePropertyGPSDictionary];
}
coordinate2D = CLLocationCoordinate2DMake(latitude, longitude);
}
}
else
{
}
} failureBlock:^(NSError *error) {
//User denied access
NSLog(@"Unable to access image: %@", error);
}];
我正在使用上面的代码来获取图像的元数据。但是现在我想编辑这个元数据。如果{GPS}字典中没有位置信息,我想在图像中添加自定义位置。
答案 0 :(得分:2)
来自apple的文档:Applications are only allowed to edit assets that they originally wrote.
因此,如果您的应用程序正在照片库中编写图像,那么只有您才能编辑其元数据。
您可以使用ALAsset
的{{1}}属性检查元数据是否可编辑。
我能够使用editable
方法更新元数据。
请参阅以下代码: 我正在传递具有更新元数据的相同图像数据。此外,我测试了更改方向而不是GPS数据,但此代码可帮助您开始:
setImageData:metadata:completionBlock: