0

次の手順に従って、GPS 座標をメタデータに追加することができました。

  1. UIImagePickerControllerSourceTypeCamera から UIIMage を取得します
  2. writeImageToSavedPhotosAlbumジオローカライズされたメタデータとともにディスク ( ) に保存
  3. でディスクから読み取り、ALAssetjpegに変換しますNSData

ディスクへの保存/読み取りの手間をかけずに同じことを行うことはできますか?

4

2 に答える 2

1

UIImagePickerControllerDelegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissModalViewControllerAnimated:YES];

    [Utils ifLocationEnabledDo:^{
        switch (picker.sourceType) {
            case UIImagePickerControllerSourceTypeCamera:
            {   
                UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
                NSMutableDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:[info objectForKey:UIImagePickerControllerMediaMetadata]];
                [Utils setLocation:metadata location:[SharedAppDelegate getCurrentLocation]];
                [[Utils getAssetsLibrary] writeImageDataToSavedPhotosAlbum:image metadata:metadata completionBlock:nil];
            }
                break;
            default:
                break;
        }
    }];
}

そして私のUtilsクラスでは:

+ (void)setLocation:(NSMutableDictionary *)metadata location:(CLLocation *)location
{

    if (location) {

        CLLocationDegrees exifLatitude  = location.coordinate.latitude;
        CLLocationDegrees exifLongitude = location.coordinate.longitude;

        NSString *latRef;
        NSString *lngRef;
        if (exifLatitude < 0.0) {
            exifLatitude = exifLatitude * -1.0f;
            latRef = @"S";
        } else {
            latRef = @"N";
        }

        if (exifLongitude < 0.0) {
            exifLongitude = exifLongitude * -1.0f;
            lngRef = @"W";
        } else {
            lngRef = @"E";
        }

        NSMutableDictionary *locDict = [[NSMutableDictionary alloc] init];
        if ([metadata objectForKey:(NSString*)kCGImagePropertyGPSDictionary]) {
            [locDict addEntriesFromDictionary:[metadata objectForKey:(NSString*)kCGImagePropertyGPSDictionary]];
        }
        [locDict setObject:[self getUTCFormattedDate:location.timestamp] forKey:(NSString*)kCGImagePropertyGPSTimeStamp];
        [locDict setObject:latRef forKey:(NSString*)kCGImagePropertyGPSLatitudeRef];
        [locDict setObject:[NSNumber numberWithFloat:exifLatitude] forKey:(NSString*)kCGImagePropertyGPSLatitude];
        [locDict setObject:lngRef forKey:(NSString*)kCGImagePropertyGPSLongitudeRef];
        [locDict setObject:[NSNumber numberWithFloat:exifLongitude] forKey:(NSString*)kCGImagePropertyGPSLongitude];
        [locDict setObject:[NSNumber numberWithFloat:location.horizontalAccuracy] forKey:(NSString*)kCGImagePropertyGPSDOP];
        [locDict setObject:[NSNumber numberWithFloat:location.altitude] forKey:(NSString*)kCGImagePropertyGPSAltitude];

        [metadata setObject:locDict forKey:(NSString*)kCGImagePropertyGPSDictionary];
    }
}
于 2013-09-17T08:14:05.647 に答える