iOS 滤镜 转载,原文见正文首行链接

转载自: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
时间: 2024-10-13 08:07:55

iOS 滤镜 转载,原文见正文首行链接的相关文章

Android实现ListView或GridView首行/尾行距离屏幕边缘距离

Android上ListView&GridView默认行都是置顶的,这样会很丑. 一般为了解决这个问题都会在首行或尾行加上一个隐藏的View,那样实在是太麻烦了.在网上看博客的时候突然看到这个属性真的很有用! 直接上关键属性: 设置ListView或GridView的android:clipToPadding = true, 然后通过paddingTop和paddingBottom设置距离就好了. 博客原文: http://www.cnblogs.com/xitang/p/3606578.htm

div+CSS实现段落首行缩进两个字符

段落前面空两个字的距离,不要再使用空格了,用CSS实现段落首缩进两个字符.应该使用首行缩进text-indent.text-indent可以使得容器内首行缩进一定单位.比如中文段落一般每段前空两个汉字. 在这里我们需要了解一种长度单位em.em是相对长度单位.相对于当前对象内文本的字体尺寸.我们中文段落一般每段前空两个汉字.实际上,就是首行缩进了2em. <style type="text/css"><!-- p{text-indent: 2em; /*em是相对单位

关于css的text-indent首行缩进两个字符和图片缩进的问题

段落前面空两个字的距离,不要再使用空格了.应该使用首行缩进text-indent. text-indent可以使得容器内首行缩进一定单位.比如中文段落一般每段前空两个汉字. <style type="text/css"> p{ text-indent: 2em; /*em是相对单位,2em即现在一个字大小的两倍*/ } </style> 注:div标签不要忘记起始符.text-indent只对p或div标签有效,对br标签不生效,原因是br标签是换行标签不是分段

iOS滤镜 和 ios6中的CoreImage技术

Core Image是一个很强大的框架. 它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光. 它利用GPU(或者CPU,取决于客户)来非常快速.甚至实时地处理图像数据和视频的帧. 多个Core Image滤镜可以叠加在一起,从而可以一次性地产生多重滤镜效果.这种多重滤镜的优点在于它可以生成一个改进的滤镜,从而一次性的处理图像达到目标效果,而不是对同一个图像顺序地多次应用单个滤镜.每一个滤镜都有属于它自己的参数.这些参数和滤镜信息,比如功能.输入参数等都可以通过程序来查

iOS 9应用开发教程之多行读写文本ios9文本视图

iOS 9应用开发教程之多行读写文本ios9文本视图 多行读写文本--ios9文本视图 文本视图也是输入控件,与文本框不同的是,文本视图可以让用户输入多行,如图2.23所示.在此图中字符串"说点什么吧"这一区域就是使用文本视图实现的,用户可以在此区域中写大量的文本内容.一般文本框视图使用UITextView实现. 图2.23  写日志 [示例2-9]以下将使用文本视图实现QQ中写说说并发表的功能.具体的操作步骤如下: (1)创建一个Single View Application模板类型

cxGrid实现取消过滤和排序后定位到首行(单选和多选)

cxGrid实现取消过滤和排序后定位到首行(单选和多选) 原创 2013年10月06日 18:42:24 2107 DataContoller中的函数FocusedRecordIndex没有反应,FocusedRowIndex正常. cxgrdtvGrid1DBTableView1.DataController.FocusedRecordIndex := 0; //定位到第一行,排序过滤无反应 cxgrdtvGrid1DBTableView1.DataController.FocusedRowI

Python程序中首行#!/usr/bin/env python的作用

1.通常我们在pycharm中写程序的时候会在首行写上#!/usr/bin/env python 如: #!/usr/bin/env python3#-*-coding: UTF-8 -*-#Author xiaoxingprint ("Hello world!") p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; color: #000000 } span.s1 { } span

excel如何冻结首行或首列及首行首列同时冻结

冻结首行方法: 首先选择首行,在菜单栏选择视图菜单,再选择冻结窗格下拉三角里的冻结首行即可. 效果如下:拖动垂直滚动条 冻结首列方法: 首先选择首列,在菜单栏选择视图菜单,再选择冻结窗格下拉三角里的冻结首列即可. 效果如下:拖动水平滚动条 冻结首行和首列: 冻结首行和首列,应先选中B2单元格(即首行和首列的交点),然后在菜单栏选择视图菜单, 再选择冻结窗格下拉三角里的冻结拆分窗格即可. 效果如下:滚动水平/垂直滚动条 原文地址:https://www.cnblogs.com/su-root/p/

CSS中字距,词距,首行缩进,字体大小,排版相关问题的探讨

先说明下,这是在谷歌浏览器下字体显示等问题做个研究,火狐下有点差异,不过火狐占有率低,而且显示的没有谷歌那么合理,不管它先.IE卡的要死,半死不活,也懒得深入研究这些细节,字体排版上不是强迫症,差别也不大. div{ border: 1px solid black; color: red; font-size: 14px; } <div>文字,咋,排-hello Spacing</div> 就是这么简单的页面.显示结果如下 汉字占的地方是绿色部分是宽14px,高14px 英文字符占