簡體   English   中英

將使用 UIImagePickerController 拍攝的圖像以 HEIC 格式保存到照片膠卷中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM