by : http://cocacola-ty.github.io
處理過程
-
讀取圖片
讀取UIImage類型圖片
將UIImage轉(zhuǎn)為NSData
根據(jù)NSData轉(zhuǎn)為CIImage
-
處理濾鏡
創(chuàng)建濾鏡轴踱。根據(jù)濾鏡名稱初始化一個濾鏡
設(shè)置濾鏡參數(shù)
設(shè)置濾鏡圖片輸入源事秀,即設(shè)置濾鏡的inputImage參數(shù)
-
處理進(jìn)行過濾鏡的圖片
獲取CIContext业踢,通過該對象將濾鏡的輸出圖像進(jìn)行處理
通過CIContext對象獲取濾鏡的輸出對象并將圖像轉(zhuǎn)換為CGImage
將CGImage轉(zhuǎn)換為UIImage
主要類
CIContext: Core Image處理上下文,圖像處理在該類完成
CIFilter:濾鏡類榄棵,定義各種濾鏡的屬性汹胃。各種濾鏡都屬于該類
CIImage:保存圖像數(shù)據(jù)
實(shí)例
/******讀取圖片部分******/
// 讀取圖片
NSString *path = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
// 將UIImage轉(zhuǎn)CIImage
NSData *data = UIImagePNGRepresentation(image);
CIImage *inputImage = [CIImage imageWithData:data];
/******處理濾鏡部分******/
// 初始化進(jìn)行濾鏡的顏色
CIColor *sepiaColor = [CIColor colorWithRed:0.76 green:0.65 blue:0.54];
// 通過濾鏡名稱創(chuàng)建濾鏡 初始化濾鏡參數(shù)
CIFilter *monochromeFilter = [CIFilter filterWithName:@"CIColorMonochrome" withInputParameters:@{@"inputColor":sepiaColor,@"inputIntensity":@1.0}];
// 設(shè)置濾鏡的輸入圖像
[monochromeFilter setValue:inputImage forKey:@"inputImage"];
// 根據(jù)濾鏡名稱創(chuàng)建濾鏡 初始化濾鏡基本參數(shù)
CIFilter *vinFilter = [CIFilter filterWithName:@"CIVignette" withInputParameters:@{@"inputRadius":@1.75,@"inputIntensity":@1.0}];
// 以經(jīng)過上一個濾鏡處理的圖像作為本次濾鏡的輸入圖像
[vinFilter setValue:monochromeFilter.outputImage forKey:@"inputImage"];
// 獲取經(jīng)過兩次濾鏡的圖像
CIImage *outputImage = vinFilter.outputImage;
// 創(chuàng)建高斯模糊濾鏡
CIFilter *blur = [CIFilter filterWithName:@"CIGaussianBlur" withInputParameters:@{@"inputRadius":@40}];
[blur setValue:inputImage forKey:@"inputImage"];
/******處理濾鏡之后圖片部分******/
// 將CIImage轉(zhuǎn)換為CGImage 再轉(zhuǎn)為UIImage
CIContext *context = [CIContext contextWithOptions:nil];
struct CGImage *cgImage = [context createCGImage:blur.outputImage fromRect:inputImage.extent];
UIImage *outputUIImage = [UIImage imageWithCGImage:cgImage];
// 顯示處理后的圖片
UIImageView *imgView = [[UIImageView alloc] init];
imgView.frame = CGRectMake(40, 40, 200, 200);
imgView.image = outputUIImage ;
[self.view addSubview:imgView];
獲取可用的濾鏡列表
// 所有可用的濾鏡
NSLog(@"可用的濾鏡\n%@",[CIFilter filterNamesInCategory:kCICategoryBuiltIn])
獲取濾鏡的屬性
// 濾鏡的屬性
NSLog(@"%@",blurFilter.attributes)
// 輸出結(jié)果為:
{
"CIAttributeFilterAvailable_Mac" = "10.4";
"CIAttributeFilterAvailable_iOS" = 6;
CIAttributeFilterCategories = (
CICategoryBlur,
CICategoryStillImage,
CICategoryVideo,
CICategoryBuiltIn
);
CIAttributeFilterDisplayName = "Gaussian Blur";
CIAttributeFilterName = CIGaussianBlur;
CIAttributeReferenceDocumentation = "http://developer.apple.com/cgi-bin/apple_ref.cgi?apple_ref=//apple_ref/doc/filter/ci/CIGaussianBlur";
inputImage = {
CIAttributeClass = CIImage;
CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
CIAttributeDisplayName = Image;
CIAttributeType = CIAttributeTypeImage;
};
inputRadius = {
CIAttributeClass = NSNumber;
CIAttributeDefault = 10;
CIAttributeDescription = "The radius determines how many pixels are used to create the blur. The larger the radius, the blurrier the result.";
CIAttributeDisplayName = Radius;
CIAttributeIdentity = 0;
CIAttributeMin = 0;
CIAttributeSliderMax = 100;
CIAttributeSliderMin = 0;
CIAttributeType = CIAttributeTypeScalar;
};
}
inputXX即該濾鏡的輸入?yún)?shù)蜓洪。(當(dāng)前濾鏡中即inputRadius)
這樣,通過查詢?yōu)V鏡的attributes的inputXX數(shù)組我們可以得到濾鏡的輸入?yún)?shù)來設(shè)置濾鏡的顯示效果
詳細(xì)解釋輸入?yún)?shù)數(shù)組
CIAttributeClass -- 該屬性接收的類型
CIAttributeDefault -- 該屬性的默認(rèn)值
CIAttributeDescription -- 該屬性的描述
CIAttributeDisplayName -- 該屬性的名稱
CIAttributeIdentity -- 屬性標(biāo)識
CIAttributeMin -- 屬性最小值
CIAttributeSliderMax -- 屬性最大值
CIAttributeType -- 屬性類型