[英]Local address of the photo or image taken with UIImagePickerController
[英]Save image taken with UIImagePickerController to photo roll in HEIC format
如果我使用我知道的方法( UIImageWriteToSavedPhotosAlbum()
和[PHAssetChangeRequest creationRequestForAssetFromImage:img]
)將圖像保存到照片膠卷,則隨后使用UIImagePickerController
選擇保存的照片會給我一個.jpg
圖像。
info[UIImagePickerControllerReferenceURL]
給出assets-library://asset/asset.JPG?id=B8B231DC-3A84-4F65-AD5E-D6C431CB5F8B&ext=JPG
和
[((PHAsset*)info[UIImagePickerControllerPHAsset]) valueForKey:@"filename"]
給我@"IMG_5512.JPG"
。
但是,如果我使用“相機”應用拍攝照片,則使用UIImagePickerController
選擇的照片具有 HEIC 擴展名(假設“高效”設置在“相機”設置中有效)。
那么什么是一種以 HEIC 格式保存到照片膠卷以響應- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
的便捷方法?
感謝馬特的評論,我能夠解決這個問題。 在如何將從 UIImagePickerController 拍攝的圖像保存為 HEIF 文件中有一個非常相似的問題? ,但不完全一樣。
UIImage* img=(UIImage*)info[UIImagePickerControllerOriginalImage];
NSDictionary* meta=(NSDictionary*)info[UIImagePickerControllerMediaMetadata];
CIContext* ctx=[CIContext context];
CIImage* ci=[[CIImage alloc] initWithImage:img options:@{kCIImageProperties:meta}];
NSData* heicData=[ctx HEIFRepresentationOfImage:ci format:kCIFormatRGBA8 colorSpace:ctx.workingColorSpace options:@{}];
NSString* __block newId=nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAsset];
[request addResourceWithType:PHAssetResourceTypePhoto data:heicData options:nil];
newId = request.placeholderForCreatedAsset.localIdentifier;
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
PHFetchResult* fr=[PHAsset fetchAssetsWithLocalIdentifiers:@[newId] options:nil];
PHAsset* phass=fr.firstObject;
NSLog(@"PHAsset:%@",phass);
} else {
NSLog(@"error:%@",error);
}
}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.