現在、 ALAssetsLibrary からPHPhotoLibrary に切り替えています。
他のデータを失うことなく、JPEG ファイルに GPS メタデータを追加または上書きしたいと考えています。
ALAssetsLibrary を使用すると、次のように実行できます。
- (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;
}
しかし、PHPhotoLibraryでは同じことはできません。
GPS メタデータを追加または上書きして NSData (JPEG ファイルから作成) を作成しようとしました。GPS メタデータを含む画像データを作成して保存できました。ただし、サムネイルデータやその他のデータ(メーカーノートなど)は失われました。また、ファイルサイズ([データ長])が約5MBから約3MBに減少しました。
GPS メタデータを使用して画像データを作成するコードは次のようになります。
- (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;
}
ALAssetsLibrarayの場合、GPS メタデータの追加前と追加後のファイル サイズはほぼ同じ (5MB) です。
次の質問のようないくつかの方法を探して試しましたが、この問題を解決できません。
いい案があれば教えてください。この問題に関する情報をいただければ幸いです。