图像选择与处理

图像选择器(UIImagePickerController)显示用户的照片库,用户选择照片后,图像选择器返回一个相应的UIImage对象。

要显示图像选择器,可分配并初始化一个UIImagePickerController实例,再设置属性sourceType,以指定用户可从哪些地方选择图像。

UIImagePickerControllerSourceTypeCamera — 相机拍摄

UIImagePickerControllerSourceTypePhotoLibrary — 照片库

UIImagePickerControllerSourceTypeSavedPhotosAlbum — 相机胶卷

照片库除了包含相机胶卷,还有来自其它App创建的图片文件夹:

触发图像选择器的一般实现方法:

- (IBAction)btnTestHandler:(id)sender
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    
    imagePicker.delegate = self;
    
    imagePicker.allowsEditing = YES;

    [self presentViewController:imagePicker animated:YES completion:nil];
    
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; //在iOS7下这句代码无效。
}

要在用户选择图像或取消选择图像时采取相应的措施。首先要为UIImagePickerController实例的delegate属性指定一个类,该类需要遵守协议UIImagePickerControllerDelegate,并实现相应的方法。同时要遵守导航控制器委托UINavigationControllerDelegate,但无需实现该协议的任何方法。

@interface ViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate>

用户在图像选择器中做出选择时,将自动调用方法imagePickerController:didFinishPickingMediaWithInfo。这个方法接收到了一个NSDictionary对象,它可能包含多项信息:图像本身、编辑后的图像版本(如果允许裁剪/缩放)或有关图像的信息。要获取所需的信息,必须提供相应的键。例如,要获取选定的图像(UIImage),需要使用UIImagePickerControllerOriginalImage键。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissViewControllerAnimated:YES completion:nil];
    UIImage *chosenImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    //Do something with the image here
}

用户取消选择图像,会调用到方法imagePickerControllerDidCancel

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

Core Image框架是iOS 5.0新增的,它提供了一些非破坏性方法,让您能够将滤镜应用于图像以及执行其他类型的图像分析。要在应用程序使用Core Image,首先需要添加Core Image框架,再导入其接口文件:

#import <CoreImage/CoreImage.h>

Core Image框架最常用的一个操作是给图像添加滤镜,Core Image定义了一种新的非破坏性图像类型CIImage,而比较常用的类型是UIImage(通常存在于UIImageView),这两种类型是可以互相转换的:

CIImage *imageToFilter = [[CIImage alloc] initWithImage:self.myImageView.image];
    
UIImage *myImage = [UIImage imageWithCIImage:imageToFilter];

要应用滤镜,必须知道滤镜的名称及其所需的参数。例如,Core Image棕色滤镜名为CISepiaTone,它接受一个名为inputIntensity的参数,该参数的取值为0.0和1.0之间的数字(值越大滤镜越强烈),下面的代码为一副图片添加了棕色滤镜:

CIImage *inputImage = [[CIImage alloc] initWithImage:self.myImageView.image];

CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setDefaults];
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputIntensity"];
[filter setValue:inputImage forKey:@"inputImage"];

CIImage *outputImage = [filter valueForKey:@"outputImage"];
self.myImageView.image = [UIImage imageWithCIImage:outputImage];
原文地址:https://www.cnblogs.com/CoderWayne/p/3748147.html