現在AVCaptureStillImageOutput
、フル解像度の画像を取得するために使用しています。次のコードを使用して、exif メタデータを取得することもできます。
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
CFDictionaryRef metaDict = CMCopyDictionaryOfAttachments(NULL, imageSampleBuffer, kCMAttachmentMode_ShouldPropagate);
CFMutableDictionaryRef mutableDict = CFDictionaryCreateMutableCopy(NULL, 0, metaDict);
NSLog(@"test attachments %@", mutableDict);
// set the dictionary back to the buffer
CMSetAttachments(imageSampleBuffer, mutableDict, kCMAttachmentMode_ShouldPropagate);
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[self.delegate frameReadyToSave:image withExifAttachments: mutableDict];
}];
mutableDict
変数に配置されているメタデータ。ここで、この画像をメタデータと共に 2 つの異なる場所に保存したいと考えています。ディスク上のアプリケーション フォルダとフォト ライブラリに保存したいと考えています。
ここで、次を使用して別の方法で画像を保存しようとしました(表示される画像変数はカスタムオブジェクトです):
NSData* imageData = UIImageJPEGRepresentation(image.image, 1.0f);
[imageData writeToFile:image.filePath atomically:YES];
UIImageWriteToSavedPhotosAlbum(image.image, nil, nil, nil);
現在、画像は適切に保存されていますが、Exif メタデータは含まれていません。
私が読んだことから、そのためには PHPhotoLibrary を使用する必要がありますが、ドキュメントはそれについてあまり詳しくありません。これが私が見つけたものです:
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image.image];
} completionHandler:nil];
しかし、メタデータを一緒に保存するにはどうすればよいですか?