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メガバイト)。
次の質問のようにいくつかの方法を試してみましたが、この問題は解決できません。
何か良いアイデアを持っている場合、私に知らせてください。私はこの問題に関する情報を感謝します。