UIImagePickerController
来源:互联网 发布:lols7鳄鱼技能数据 编辑:程序博客网 时间:2024/06/05 10:26
UIImagePickerController
照片的来源UIImagePickerControllerSourceType包括:
- 照片库(不可删除):UIImagePickerControllerSourceTypePhotoLibrary
- 照相机:UIImagePickerControllerSourceTypeCamera
保存的照片(可以删除):UIImagePickerControllerSourceTypeSavedPhotosAlbum
代理类:UIImagePickerControllerDelegate, UINavigationControllerDelegate
//检查照片源是否可用if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; [imagePicker setAllowsEditing:YES]; [imagePicker setDelegate:self]; [self presentViewController:imagePicker animated:YES completion:nil]; } else { NSLog(@"照片源不可用"); }代理方法: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSLog(@"%@", info); UIImage *image = info[@"UIImagePickerControllerEditedImage"]; [_imageView setImage:image]; [self dismissViewControllerAnimated:YES completion:nil]; //可以使用多线程序来保存 }
//指定使用照相机模式,可以指定使用相册/照片库 imagepicker.sourceType = UIImagePickerControllerSourceTypeCamera; //设置当拍照完或在相册选完照片后,是否跳到编辑模式进行图片剪裁。只有当showsCameraControls属性为true时才有效果 imagepicker.allowsEditing = YES; //设置拍照时的下方的工具栏是否显示,如果需要自定义拍摄界面,则可把该工具栏隐藏 imagepicker.showsCameraControls = YES; //设置使用后置摄像头,可以使用前置摄像头 imagepicker.cameraDevice = UIImagePickerControllerCameraDeviceRear; //设置闪光灯模式 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) { UIImagePickerControllerCameraFlashModeOff = -1, UIImagePickerControllerCameraFlashModeAuto = 0, UIImagePickerControllerCameraFlashModeOn = 1 }; */ imagepicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; //设置相机支持的类型,拍照和录像 imagepicker.mediaTypes = @[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie]; //设置拍摄时屏幕的view的transform属性,可以实现旋转,缩放功能 // imagepicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180); // imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5); //所有含有cameraXXX的属性都必须要sourceType是UIImagePickerControllerSourceTypeCamera时设置才有效果,否则会有异常 //设置UIImagePickerController的代理 imagepicker.delegate = self;-(void)showCamera{ //用模态方式呈现imagepicker [self presentModalViewController:imagepicker animated:YES];}使用 imagepicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180);旋转45度的效果:使用imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);全屏的效果,同时imagepicker.showsCameraControls =NO;隐藏工具栏:使用imagepicker.allowsEditing = YES;出现的图片编辑效果,只有当imagepicker.showsCameraControls = YES;才有效果:使用 imagepicker.mediaTypes = @[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];支持拍照和视频的前后对比效果:
UIImagePickerController回调详解
//成功获得相片还是视频后的回调- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ //通过UIImagePickerControllerMediaType判断返回的是照片还是视频 NSString* type = [info objectForKey:UIImagePickerControllerMediaType]; //如果返回的type等于kUTTypeImage,代表返回的是照片,并且需要判断当前相机使用的sourcetype是拍照还是相册 if ([type isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera) { //获取照片的原图 UIImage* original = [info objectForKey:UIImagePickerControllerOriginalImage]; //获取图片裁剪的图 UIImage* edit = [info objectForKey:UIImagePickerControllerEditedImage]; //获取图片裁剪后,剩下的图 UIImage* crop = [info objectForKey:UIImagePickerControllerCropRect]; //获取图片的url NSURL* url = [info objectForKey:UIImagePickerControllerMediaURL]; //获取图片的metadata数据信息 NSDictionary* metadata = [info objectForKey:UIImagePickerControllerMediaMetadata]; //如果是拍照的照片,则需要手动保存到本地,系统不会自动保存拍照成功后的照片 UIImageWriteToSavedPhotosAlbum(edit, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); }else{ } //模态方式退出uiimagepickercontroller [imagepicker dismissModalViewControllerAnimated:YES];}//取消照相机的回调- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ //模态方式退出uiimagepickercontroller [imagepicker dismissModalViewControllerAnimated:YES];}//保存照片成功后的回调- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ NSLog(@"saved..");}
UIImagePickerController的静态方法
imagepicker = [[UIImagePickerController alloc]init]; //UIImagePickerController静态方法判断设备是否支持照相机/图片库/相册功能 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera, UIImagePickerControllerSourceTypeSavedPhotosAlbum }; */ BOOL isCameraSupport = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; NSLog(@"support camera:%d",isCameraSupport); //UIImagePickerController静态方法判断设备是否支持前置摄像头/后置摄像头 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { UIImagePickerControllerCameraDeviceRear, UIImagePickerControllerCameraDeviceFront }; */ BOOL isRearSupport = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]; NSLog(@"rear support:%d",isRearSupport); //UIImagePickerController静态方法判断设备是否支持前置摄像头闪光灯/后置摄像头闪光灯 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { UIImagePickerControllerCameraDeviceRear, UIImagePickerControllerCameraDeviceFront }; */ BOOL isFlushSupport = [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear]; NSLog(@"rear flash support:%d",isFlushSupport); //UIImagePickerController静态方法返回前置摄像头/后置摄像头支持的拍摄类型 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { UIImagePickerControllerCameraDeviceRear, UIImagePickerControllerCameraDeviceFront }; */ //返回类型有照片和视频 /* enum { UIImagePickerControllerCameraCaptureModePhoto, UIImagePickerControllerCameraCaptureModeVideo }; typedef NSUInteger UIImagePickerControllerCameraCaptureMode; */ NSArray* captureModes = [UIImagePickerController availableCaptureModesForCameraDevice:UIImagePickerControllerCameraDeviceRear]; for (NSNumber* mode in captureModes) { NSLog(@"capture modes:%d",[mode integerValue]); } //UIImagePickerController静态方法返回照相机/相册/照片库所支持的媒体类型 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera, UIImagePickerControllerSourceTypeSavedPhotosAlbum }; */ //返回类型有kUTTypeMovie,kUTTypeImage,其他类型均在<MobileCoreServices/MobileCoreServices.h>下 NSArray* mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; for (NSString* type in mediaTypes) { NSLog(@"media types:%@",type); }
UIImagePickerController从拍照、图库、相册获取图片
iOS 获取图片有三种方法:
1. 直接调用摄像头拍照
2. 从相册中选择
3. 从图库中选择
UIImagePickerController 是系统提供的用来获取图片和视频的接口;
用UIImagePickerController 类来获取图片视频,大体分为以下几个步骤:
1. 初始化UIImagePickerController 类;
2. 设置UIImagePickerController 实例的数据来源类型(下面解释);
3. 设置设置代理;
4. 如果需要做图片修改的话设置allowsEditing =yes。
数据来源类型一共有三种:
enum { UIImagePickerControllerSourceTypePhotoLibrary ,//来自图库 UIImagePickerControllerSourceTypeCamera ,//来自相机 UIImagePickerControllerSourceTypeSavedPhotosAlbum //来自相册 };
在用这些来源的时候最好检测以下设备是否支持;
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { NSLog(@"支持相机"); } if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { NSLog(@"支持图库"); } if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { NSLog(@"支持相片库"); }
调用摄像头来获取资源
- (void)viewDidLoad { [super viewDidLoad]; picker = [[UIImagePickerController alloc]init]; picker.view.backgroundColor = [UIColor orangeColor]; UIImagePickerControllerSourceType sourcheType = UIImagePickerControllerSourceTypeCamera; picker.sourceType = sourcheType; picker.delegate = self; picker.allowsEditing = YES; }
上面只是实例了UIImagePickerController及其属性 在需要获取图片的时候需要弹出窗口调用 [self presentViewController:picker animated:YES completion:nil];
我们还需要代理来获取我们选中的图片 UIImagePickerControllerDelegate
代理中一共三个方法 其中一个3.0 已经废弃了,只剩下两个我们需要用的
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
当用户选取完成后调用; - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
当用户取消选取时调用; - (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info;
选取的信息都在info中,info 是一个字典。
字典中的键:
NSString *const UIImagePickerControllerMediaType ;指定用户选择的媒体类型(文章最后进行扩展) NSString *const UIImagePickerControllerOriginalImage ;原始图片 NSString *const UIImagePickerControllerEditedImage ;修改后的图片 NSString *const UIImagePickerControllerCropRect ;裁剪尺寸 NSString *const UIImagePickerControllerMediaURL ;媒体的URL NSString *const UIImagePickerControllerReferenceURL ;原件的URL NSString *const UIImagePickerControllerMediaMetadata;当来数据来源是照相机的时候这个值才有效
UIImagePickerController 的更多参数参考这里。
代理中的功能参考这里。
UIImagePickerControllerMediaType 包含着KUTTypeImage 和KUTTypeMovie
KUTTypeImage 包含:
1 const CFStringRef kUTTypeImage ;抽象的图片类型 2 const CFStringRef kUTTypeJPEG ; 3 const CFStringRef kUTTypeJPEG2000 ; 4 const CFStringRef kUTTypeTIFF ; 5 const CFStringRef kUTTypePICT ; 6 const CFStringRef kUTTypeGIF ; 7 const CFStringRef kUTTypePNG ; 8 const CFStringRef kUTTypeQuickTimeImage ; 9 const CFStringRef kUTTypeAppleICNS 10 const CFStringRef kUTTypeBMP; 11 const CFStringRef kUTTypeICO;
KUTTypeMovie 包含
1 const CFStringRef kUTTypeAudiovisualContent ;抽象的声音视频2 const CFStringRef kUTTypeMovie ;抽象的媒体格式(声音和视频)3 const CFStringRef kUTTypeVideo ;只有视频没有声音4 const CFStringRef kUTTypeAudio ;只有声音没有视频5 const CFStringRef kUTTypeQuickTimeMovie ;6 const CFStringRef kUTTypeMPEG ;7 const CFStringRef kUTTypeMPEG4 ;8 const CFStringRef kUTTypeMP3 ;9 const CFStringRef kUTTypeMPEG4Audio ;10 const CFStringRef kUTTypeAppleProtectedMPEG4Audio;
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- UIImagePickerController
- 手把手教你在Photoshop中使用色阶工具
- mysql5.7绿色版安装--windows
- 枚举学习
- PCL同时在一个窗口中显示两个(多个)点云
- Win10 VS2013编译Boost 1.62.0
- UIImagePickerController
- JSP三大指令
- 手把手教你Photoshop蒙版的使用(一)
- uFrame MVVM 1.6 自学路线
- JavaScript Dom详解总结
- SLR-智能交通道路最优化分配
- 3D文件压缩库——Draco简析
- jinjia2模板编程
- 手把手教你Photoshop蒙版的使用(二)