我目前正在使用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
变量中。现在,我想将这张图片与元数据一起保存在两个不同的地方。我想将它保存在磁盘上的应用程序文件夹和照片库中。
现在,我尝试使用以下方法以另一种方法保存图像(您看到的图像变量是自定义对象):
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];
但是如何用它保存元数据呢?