2016-07-11 2 views
0

で保存します。は追加または上書きGPSメタデータを他のデータを失うことなく、そして現在、私はPHPhotoLibrary</strong><strong>に<strong>ALAssetsLibrary</strong>から切り替えていPHPhotoLibrary

GPSメタデータをJPEGファイルに追加または上書きしたい場合は、には他のデータがありません。 ALAssetsLibraryで

私は同じことを行うことはできませんPHPhotoLibrary

- (void)saveImageDataToPhotoAlbum:(NSData *)originalData 
{ 
    ALAssetsLibrary *assetsLib = [[ALAssetsLibrary alloc] init]; 
    NSDictionary *dataDic = [self getMetaDataWithGps:originalData]; 

    [assetsLib writeImageDataToSavedPhotosAlbum:originalData 
             metadata:[self getMetadataWithGpsInfo:originalData] 
           completionBlock:^(NSURL *url, NSError *e) { 
            [self addToMyAlbum:url]; 
           }]; 
} 

- (NSDictionary *)getMetadataWithGpsInfo:(NSData *)originalData 
{ 
    CGImageSourceRef cimage = CGImageSourceCreateWithData((CFDataRef)data, nil); 
    NSDictionary *metadata = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(cimage, 0, nil); 
    NSMutableDictionary *metadataAsMutable = [NSMutableDictionary dictionaryWithDictionary:metadata]; 

    metadataAsMutable[(NSString *)kCGImagePropertyGPSDictionary] = self.myGpsDic; 

    [metadata release]; 
    CFRelease(cimage); 

    return metadataAsMutable; 
} 

以下でもと同じように、我々はそれを行うことができます。

GPSメタデータを追加または上書きしてNSData(JPEGファイルから作成)を作成しようとしました。 I は、GPSメタデータで画像データを作成して保存できます。 しかし、サムネイルデータや他のデータ(メーカーノートなど)が失われました。さらに、ファイルサイズ([データ長])は約5MBから約3MBに減少しました。

GPSメタデータを用いて画像データを作成するために、私のコードは以下のようである、ALAssetsLibraray、ファイルサイズの場合

- (NSData *)getDataWithGpsInfo:(NSData *)originalData 
{ 
    CGImageSourceRef cimage = CGImageSourceCreateWithData((CFDataRef)data, nil); 
    NSDictionary *metadata = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(cimage, 0, nil); 
    NSMutableDictionary *metadataAsMutable = [NSMutableDictionary dictionaryWithDictionary:metadata]; 

    metadataAsMutable[(NSString *)kCGImagePropertyGPSDictionary] = self.myGpsDic; 

    NSMutableData *dataWithLocationInfo = [NSMutableData data]; 
    CGImageDestinationRef dest = 
     CGImageDestinationCreateWithData((CFMutableDataRef)dataWithLocationInfo, CGImageSourceGetType(cimage), 1, nil); 
    CGImageDestinationAddImageFromSource(dest, cimage, 0, (CFDictionaryRef)metadataAsMutable); 
    CGImageDestinationFinalize(dest); 
    CFRelease(dest); 

    [metadata release]; 
    CFRelease(cimage); 

    return dataWithLocationInfo; 
} 

ほぼ同じである前/ GPSメタデータを追加した後(5メガバイト)。

次の質問のようにいくつかの方法を試してみましたが、この問題は解決できません。

何か良いアイデアを持っている場合、私に知らせてください。私はこの問題に関する情報を感謝します。

答えて

1

私はAppleにTSI(Technical Support Incident)でこの質問をしました。 しかし、彼らは問題を解決するために明確な答えを出していませんでした。

ここで、場所情報を追加して画像を保存するときに、ALAssetsLibraryのAPIを使用することにしました。

- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock; 
関連する問題

 関連する問題