如何在iOS8中编辑图像的元数据?

时间:2015-06-22 05:15:18

标签: objective-c iphone ios8 uiimagepickercontroller alassetslibrary

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}字典中没有位置信息,我想在图像中添加自定义位置。

1 个答案:

答案 0 :(得分:2)

来自apple的文档:Applications are only allowed to edit assets that they originally wrote.因此,如果您的应用程序正在照片库中编写图像,那么只有您才能编辑其元数据。

您可以使用ALAsset的{​​{1}}属性检查元数据是否可编辑。

我能够使用editable方法更新元数据。

请参阅以下代码: 我正在传递具有更新元数据的相同图像数据。此外,我测试了更改方向而不是GPS数据,但此代码可帮助您开始:

setImageData:metadata:completionBlock: