ios-獲取相簿相機圖片
阿新 • 來源:網路 • 發佈:2021-02-14
title: ios-獲取相簿相機圖片
categories: Ios
tags: [ios, 相簿, 相機]
date: 2021-02-11 16:29:28
comments: false
mathjax: true
toc: true
ios-獲取相簿相機圖片
前篇
- 隱私資訊 info.plist 配置: https://stackoverflow.com/questions/39465687/nscamerausagedescription-in-ios-10-0-runtime-crash
- iOS關於相機相簿許可權設定 - https://www.jianshu.com/p/84df2ca84ade
- iOS 獲取圖片(拍照、相簿、相簿)詳解 - https://www.jianshu.com/p/39a6a104d3c1
- iOS 拍照(相機)/相簿獲取圖片 - https://www.jianshu.com/p/5465e87d8a0a
- iOS關於相機相簿許可權設定 - https://www.jianshu.com/p/84df2ca84ade
- iOS開發:呼叫系統自帶相機以及獲取相簿照片的功能實現 - https://www.cnblogs.com/sundaysgarden/articles/9188975.html
獲取相簿圖片
-
在 info.plist 中配置相簿許可權提示:
Key : Privacy - Photo Library Usage Description Value : $(PRODUCT_NAME) photo use -
實現 <UIKit/UIKit.h> 中 UIImagePickerControllerDelegate 代理介面
// 當用戶選取完成後呼叫; - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { ... } // 當用戶取消選取時呼叫; - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { ... } -
獲取相簿
#import <Photos/Photos.h> // 檢查相簿是否可用 +(BOOL)checkGallery{ PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus]; if (authStatus == PHAuthorizationStatusRestricted || authStatus == PHAuthorizationStatusDenied) { return NO; } return YES; } // 獲取相簿 -(void)getGallery:(CPicture*)data cb:(CodeMsgFn)cb { self.data = data; self.cb = cb; //本地相簿不需要檢查,因為UIImagePickerController會自動檢查並提醒 UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.delegate = self; picker.allowsEditing = data.isEdit; // 設定選擇後的圖片可被編輯 BOOL isOk = [PicHelper checkGallery]; // 先檢查相機可用是否 if (isOk == NO) { [self doCallback:ECodePermissionDenyError msg:@"--- no gallery permission"]; } else { [Tool presentVC:picker]; // 開啟相簿 } }
相機拍照
-
在 info.plist 中配置相機許可權提示:
Key : Privacy - Camera Usage Description Value : $(PRODUCT_NAME) camera use -
實現 <UIKit/UIKit.h> 中 UIImagePickerControllerDelegate 代理介面 (和相簿一樣)
// 當用戶選取完成後呼叫; - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { ... } // 當用戶取消選取時呼叫; - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { ... } -
開啟相機
#import <AVFoundation/AVCaptureDevice.h> #import <AVFoundation/AVMediaFormat.h> // 檢查相機是否可用 +(BOOL)checkCamera{ // 如果使用者點選 不允許, 則為 0 NSString *mediaType = AVMediaTypeVideo; AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType]; if(AVAuthorizationStatusRestricted == authStatus || AVAuthorizationStatusDenied == authStatus) { return NO; } return YES; } // 相機拍照 -(void)takePicture:(CPicture*)data cb:(CodeMsgFn)cb { self.data = data; self.cb = cb; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.delegate = self; picker.allowsEditing = data.isEdit; // 設定拍照後的圖片可被編輯 picker.sourceType = UIImagePickerControllerSourceTypeCamera; BOOL isOk = [PicHelper checkCamera]; // 先檢查相機可用是否 if (isOk == NO) { [self doCallback:ECodePermissionDenyError msg:@"--- no camera permission"]; } else { [Tool presentVC:picker]; // 開啟相機 } } else { [self doCallback:ECodeUnknown msg:@"--- not isSourceTypeAvailable, you device may be iphonesimulator"]; } } -
測試

踩坑
呼叫拍照閃退
報錯資訊: he app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data
就是需要在 info.plist 中配置相機提示.
