转载自:http://blog.sina.com.cn/s/blog_5fb39f9101018gv7.html

直接上代码了:

//
// ViewController.m
// 图片模糊处理
//
// Created by wusiping on 16/1/28.
// Copyright © 2016年 wusiping. All rights reserved.
// #import "ViewController.h"
#import <AssetsLibrary/AssetsLibrary.h> @interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate> @end @implementation ViewController{
CIContext *context;
CIFilter *filter;
CIImage *beginImage;
} - (void)viewDidLoad {
[super viewDidLoad]; //取得图片路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
NSURL *fileNameAndPath = [NSURL fileURLWithPath:filePath];
//根据路径,创建开始图片
beginImage = [CIImage imageWithContentsOfURL:fileNameAndPath]; context = [CIContext contextWithOptions:nil];
//创建滤镜,和输出图片
filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues: kCIInputImageKey, beginImage, @"inputIntensity", @0.8, nil];
CIImage *outputImage = [filter outputImage]; //在这里你用上下文对象里的一个方法来画一个CGImage,调用上下文中的createCGImage:fromRect:和提供的CIImage可以生成一个CGImageRef。
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; //下面,你用UIImage + imageWithCGImage,从CGImage中创建一个UIImage。
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
self.imageView.image = newImage; //最后,开放 CGImageRef接口。 CGImage 是一个C接口,即使有ARC,也需要你自己来做内存管理。编译运行,确保正常工作。
CGImageRelease(cgimg); [self logAllFilters];
} - (IBAction)amountSliderValueChanged:(id)sender {
float slideValue = self.amountSlider.value;
[filter setValue:@(slideValue) forKey:@"inputIntensity"];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
self.imageView.image = newImage;
CGImageRelease(cgimg);
} - (IBAction)loadPhoto:(id)sender {
UIImagePickerController *pickerC = [[UIImagePickerController alloc] init];
pickerC.delegate = self;
[self presentViewController:pickerC animated:YES completion:nil];
} - (IBAction)savePhoto:(id)sender {
CIImage *saveToSave = [filter outputImage];
CIContext *softwareContext = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)} ];
CGImageRef cgImg = [softwareContext createCGImage:saveToSave fromRect:[saveToSave extent]];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:cgImg metadata:[saveToSave properties] completionBlock:^(NSURL *assetURL, NSError *error) { CGImageRelease(cgImg); }];
} - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissViewControllerAnimated:YES completion:nil];
UIImage *gotImage = [info objectForKey:UIImagePickerControllerOriginalImage];
beginImage = [CIImage imageWithCGImage:gotImage.CGImage];
[filter setValue:beginImage forKey:kCIInputImageKey];
[self amountSliderValueChanged:self.amountSlider];
} - (void)imagePickerControllerDidCancel: (UIImagePickerController *)picker {
[self dismissViewControllerAnimated:YES completion:nil];
} /**
* 打印所有滤镜
*/
-(void)logAllFilters {
NSArray *properties = [CIFilter filterNamesInCategory: kCICategoryBuiltIn];
NSLog(@"%@", properties);
for (NSString *filterName in properties){
CIFilter *fltr = [CIFilter filterWithName:filterName];
NSLog(@"%@", [fltr attributes]);
}
} @end

最新文章

  1. iOS 相机
  2. JSTL标签功能集锦
  3. jdbc java数据库连接 6)类路径读取——JdbcUtil的配置文件
  4. 如何实现ZBrush中的Alt和Shift键的快速运用
  5. HBase之过滤器
  6. 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)
  7. 漂亮的自制java验证码
  8. Scribefire发CSDN博客
  9. NHibernate中的IQueryable和IQueryover
  10. Android Studio 实用快捷键
  11. 表格(table) 插件:支持当前行增行、删除。使用事件委托
  12. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)
  13. Python自动化开发-基础语法
  14. Shell 的特殊变量
  15. 学习笔记-C++ STL iterator与对指针的理解-20170618
  16. flex 强制转换类型失败无法将object转换为XXX
  17. 【转】视频H5 video最佳实践
  18. 关于javascript闭包(Closure)和return之间的暧昧关系
  19. 关于生物项目上的blast和viroblast
  20. js 一些方法

热门文章

  1. 实验时css层叠样式表不更新的情况
  2. Qt中如果通过QStyle自定义能够跨平台的界面控件
  3. ExpandableListView(一)替换系统默认的箭头
  4. mysql的函数
  5. 手把手教你在openshift上搭建wordpress博客(二)
  6. c/c++ double的数字 转成字符串后 可以有效的避免精度要求不高的数
  7. ZOJ3689 Digging(01背包)
  8. spring AOP简单入门
  9. C#WebService 客户端通过Http调用请求(转)
  10. JZOI