【无线互联】基于ios系统的图片(滤镜)编辑

 实现滤镜功能所用了一些简单的xcode自带的框架 ,如<AssetsLibrary/AssetsLibrary.h><CoreImage/CoreImage.h> 等框架.功能实现来说相对比较简单。具体有功能有如下几点.1.对图片进行老旧化、复古化处理 2.对图片进行旋转处理 3.重置图片  4.访问相册,并选取相册中的图片来进行滤镜处理  5.保存处理后的图片到相册中

框架实现的原理有利用CoreImage 框架创建基于GPU的CIContext对象,创建CIImage用于处理需要处理的图片,创建CIFilter,具体实施渲染,进行处理后进行图片输出,重置图片就是当改变slider的value时,其他参数回归到初始值。访问相册要用到UIImagePickerController及其代理方法,保存图片就要用到AssetsLibrary框架进行写入处理.

那么,接下来我们用具体代码来实现下功能。首先我们需要创建好一个带xib的viewController,并且在里面拖入三个slider(用作测试三种效果),然后设置它们的移动事件,导入上述的两个框架。首先我们需要做的是打印所有过滤器的信息,方便我们进行查找具体滤镜的效果和它的参数范围,代码如下:

//所有滤镜的效果

    NSArray *properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];

    //遍历所有效果的参数,并且打印出来,用于参考

    for (NSString *filterName in properties) { 

        CIFilter *fltr = [CIFilter filterWithName:filterName];

        NSLog(@"%@:\n%@" , filterName,[fltr attributes]);

    }

    首先我们需要实现的是老旧色彩的改变 : 

    1.首先我们得到图片的路径,加载出来,转换成CIImage类型


    ViewController.h 文件

    @property (strong, nonatomic) CIImage *beginImage;

    @property (strong, nonatomic) CIContext *context;

    @property (strong, nonatomic) CIFilter *filter;


    ViewController.m文件

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"屏幕快照 2015-03-30 下午6.47.56.png" ofType:nil];

    NSURL *fileNameAndPath = [NSURL fileURLWithPath:filePath];

    _beginImage = [CIImage imageWithContentsOfURL:fileNameAndPath];

 

    2.创建基于GPU的context对象(类似上下文)  

    _context = [CIContext contextWithOptions:nil];

    

    3.创建过滤器,过滤器的类型,这里我们首先选用的是一个棕色的滤镜

    _filter = [CIFilter filterWithName:@"CISepiaTone"];

    

    4.初始化slider 和 初始化图片,指定需要过滤的图片

    [_filter setValue:_beginImage forKey:kCIInputImageKey];

    

    5.指定过滤的参数 

    [_filter setValue:[NSNumber numberWithFloat:sliderValue] forKey:@"inputIntensity"];

   

    6.得到过滤后的图片,并且把它转换为UIImage类型,用以在视图上显示    

    CIImage *outputImage = [_filter outputImage];

    CGImageRef img = [_context createCGImage:outputImage fromRect:[outputImage extent]];

    UIImage *newImg = [UIImage imageWithCGImage:img];

 

    7.类似绘图,我们需要释放c对象

     CGImageRelease(img);

    以上就是棕色功能的实现,类似复古色彩,或者旋转只需要改变下参数即可实现其功能  复古色彩滤镜类型为:CIHueAdjust,参数为inputAngle。旋转的滤镜类型为CIStraightenFilter,参数为inputAngle。

    

    访问相册,及其选取相册进行滤镜处理

    1.访问相册,并且设置代理

    UIImagePickerController *pickerC = [[UIImagePickerController alloc] init];

    pickerC.delegate = self;

    [self presentModalViewController:pickerC animated:YES];


    2.实现代理方法,把选取的图片作为背景视图进行显示

    #pragma mark - UIImagePickerControllerDelegate 

    //当得到照片或者视频时调用该方法

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {


    [self dismissModalViewControllerAnimated:YES];

    //获取选中图片

    UIImage *gotImage = [info objectForKey:UIImagePickerControllerOriginalImage];

    _beginImage = [CIImage imageWithCGImage:gotImage.CGImage];

    //设置为背景

    _imgV.image = gotImage;

}

    
   3.点击cancel时调用的方法

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [self dismissModalViewControllerAnimated:YES];

}

  

  保存功能的实现
  

- (IBAction)savePhoto:(UIButton *)sender {

    

    CIImage *saveToSave = [_filter outputImage];

    CGImageRef cgimg = [_context createCGImage:saveToSave fromRect:[saveToSave extent]];

    

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    

    [library writeImageToSavedPhotosAlbum:cgimg metadata:[saveToSave properties] completionBlock:^(NSURL *assetURL, NSError *error) {

        CGImageRelease(cgimg);

    }];

}


  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值