iOS 调用相机,获取相册,截取头像
前言
应用经常需要使用到用户提供的图像。iOS提供了两种方式:UIImagePickerController和资产库:(asset library)。UIImagePickerController提供了导航相册和照片的模态用户界面,适合在应用没有特殊的照片浏览和选择需求(即Apple提供的风格就能满足要求)时使用;资产库提供了全面的照片和相册访问功能,适合在图像导航和选择有特殊用户页面和风格需求时使用。
具体实现代码说明
调用相机前,先检查当前是否支持相机
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]
跳转到系统相关页面,比如相机页面或者相册页面还有系统联系人页面,都会用到模块化的页面跳转方式,代码如下:
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.allowsEditing = YES;
imagePickerController.sourceType = sourceType;
[self presentViewController:imagePickerController animated:YES completion:^{}];
在进行系统的拍照活动时,系统拍照页面会有返回和使用图片的按钮,点击这两个按钮会响应不同的协议方法:
#pragma mark - image picker delegte
//用户点击选取器中的“choose”按钮时被调用,告知委托对象,选取操作已经完成,同时将返回选取图片的实例
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissViewControllerAnimated:YES completion:^{}];
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
/* 此处info 有六个值
* UIImagePickerControllerMediaType; // an NSString UTTypeImage)
* UIImagePickerControllerOriginalImage; // a UIImage 原始图片
* UIImagePickerControllerEditedImage; // a UIImage 裁剪后图片
* UIImagePickerControllerCropRect; // an NSValue (CGRect)
* UIImagePickerControllerMediaURL; // an NSURL
* UIImagePickerControllerReferenceURL // an NSURL that references an asset in the AssetsLibrary framework
* UIImagePickerControllerMediaMetadata // an NSDictionary containing metadata from a captured photo
*/
// 保存图片至本地,方法见下文
[self saveImage:image withName:@"currentImage.png"];
NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
isFullScreen = NO;
[self.headerImage setImage:savedImage];
self.headerImage.tag = 100;
}
//用户点击图像选取器中的“cancel”按钮时被调用,这说明用户想要中止选取图像的操作
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:^{}];
}
当使用刚才拍的照片作为头像时,你可以使用该属性,这样你获取到的就是裁剪后的图片。
UIImagePickerControllerEditedImage;
但是若你没有对图像进行编辑,那么该键值对下面是没有该属性的,在开发过程中需要注意这一点。