使用CoreImage教程
CoreImage包含有很多实用的滤镜,专业处理图片的库,为了能看到各种渲染效果,请使用如下图片素材.
现在可以开始教程了:
#define FIX_IMAGE(image) fixImageWidth(image, 320.f)// 固定图片的宽度
UIImage * fixImageWidth(UIImage *image, CGFloat width)
{float newHeight = image.size.height * (width / image.size.width);CGSize size = CGSizeMake(width, newHeight);UIGraphicsBeginImageContextWithOptions(size, NO, 0);CGContextRef context = UIGraphicsGetCurrentContext();CGContextTranslateCTM(context, 0.0, size.height);CGContextScaleCTM(context, 1.0, -1.0);CGContextSetBlendMode(context, kCGBlendModeCopy);CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height),image.CGImage);UIImage *imageOut = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return imageOut;
}代码片段
// 将UIImage转换成CIImageCIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"1.jpg"]];// 创建滤镜CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectMono"keysAndValues:kCIInputImageKey, ciImage, nil];[filter setDefaults];// 获取绘制上下文CIContext *context = [CIContext contextWithOptions:nil];// 渲染并输出CIImageCIImage *outputImage = [filter outputImage];// 创建CGImage句柄CGImageRef cgImage = [context createCGImage:outputImagefromRect:[outputImage extent]];// 获取图片UIImage *showImage = [UIImage imageWithCGImage:cgImage];// 释放CGImage句柄CGImageRelease(cgImage);// 显示图片UIImageView *imageView = \[[UIImageView alloc] initWithImage:FIX_IMAGE(showImage)];[self.view addSubview:imageView];代码片段
效果如下:
我们对操作进行简易的封装:
CIFilterEffect.h + CIFilterEffect.m
//
// CIFilterEffect.h
// CIFilter
//
// Created by YouXianMing on 14-5-9.
// Copyright (c) 2014年 Y.X. All rights reserved.
//#import <Foundation/Foundation.h>@interface CIFilterEffect : NSObject@property (nonatomic, strong, readonly) UIImage *result;- (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name;@end
//
// CIFilterEffect.m
// CIFilter
//
// Created by YouXianMing on 14-5-9.
// Copyright (c) 2014年 Y.X. All rights reserved.
//#import "CIFilterEffect.h"@interface CIFilterEffect ()@property (nonatomic, strong, readwrite) UIImage *result;@end@implementation CIFilterEffect- (instancetype)initWithImage:(UIImage *)image filterName:(NSString *)name
{self = [super init];if (self){// 将UIImage转换成CIImageCIImage *ciImage = [[CIImage alloc] initWithImage:image];// 创建滤镜CIFilter *filter = [CIFilter filterWithName:namekeysAndValues:kCIInputImageKey, ciImage, nil];[filter setDefaults];// 获取绘制上下文CIContext *context = [CIContext contextWithOptions:nil];// 渲染并输出CIImageCIImage *outputImage = [filter outputImage];// 创建CGImage句柄CGImageRef cgImage = [context createCGImage:outputImagefromRect:[outputImage extent]];_result = [UIImage imageWithCGImage:cgImage];// 释放CGImage句柄CGImageRelease(cgImage);}return self;
}@end
我们来开始尝试其他的滤镜效果,我们可以尝试的至少有这些:
@"CILinearToSRGBToneCurve",
@"CIPhotoEffectChrome",
@"CIPhotoEffectFade",
@"CIPhotoEffectInstant",
@"CIPhotoEffectMono",
@"CIPhotoEffectNoir",
@"CIPhotoEffectProcess",
@"CIPhotoEffectTonal",
@"CIPhotoEffectTransfer",
@"CISRGBToneCurveToLinear",
@"CIVignetteEffect",
下面是所有渲染出来的图片,与上面提供的滤镜名字一一对应:
以下效果是需要进行一些配置才能达到的效果,这个就不开源了,你懂得:).
福利:
Core Image Filter Reference
https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html
CICategoryBlur
CIBoxBlur
CIDiscBlur
CIGaussianBlur
CIMedianFilter
CIMotionBlur
CINoiseReduction
CIZoomBlur
CICategoryColorAdjustment
CIColorClamp
CIColorControls
CIColorMatrix
CIColorPolynomial
CIExposureAdjust
CIGammaAdjust
CIHueAdjust
CILinearToSRGBToneCurve
CISRGBToneCurveToLinear
CITemperatureAndTint
CIToneCurve
CIVibrance
CIWhitePointAdjust
CICategoryColorEffect(我们刚刚用到的一些效果在这里哦)
CIColorCrossPolynomial
CIColorCube
CIColorCubeWithColorSpace
CIColorInvert
CIColorMap
CIColorMonochrome
CIColorPosterize
CIFalseColor
CIMaskToAlpha
CIMaximumComponent
CIMinimumComponent
CIPhotoEffectChrome
CIPhotoEffectFade
CIPhotoEffectInstant
CIPhotoEffectMono
CIPhotoEffectNoir
CIPhotoEffectProcess
CIPhotoEffectTonal
CIPhotoEffectTransfer
CISepiaTone
CIVignette
CIVignetteEffect
CICategoryCompositeOperation
CIAdditionCompositing
CIColorBlendMode
CIColorBurnBlendMode
CIColorDodgeBlendMode
CIDarkenBlendMode
CIDifferenceBlendMode
CIExclusionBlendMode
CIHardLightBlendMode
CIHueBlendMode
CILightenBlendMode
CILuminosityBlendMode
CIMaximumCompositing
CIMinimumCompositing
CIMultiplyBlendMode
CIMultiplyCompositing
CIOverlayBlendMode
CISaturationBlendMode
CIScreenBlendMode
CISoftLightBlendMode
CISourceAtopCompositing
CISourceInCompositing
CISourceOutCompositing
CISourceOverCompositing
CICategoryDistortionEffect
CIBumpDistortion
CIBumpDistortionLinear
CICircleSplashDistortion
CICircularWrap
CIDroste
CIDisplacementDistortion
CIGlassDistortion
CIGlassLozenge
CIHoleDistortion
CILightTunnel
CIPinchDistortion
CIStretchCrop
CITorusLensDistortion
CITwirlDistortion
CIVortexDistortion
CICategoryGenerator
CICheckerboardGenerator
CIConstantColorGenerator
CILenticularHaloGenerator
CIQRCodeGenerator
CIRandomGenerator
CIStarShineGenerator
CIStripesGenerator
CISunbeamsGenerator
CICategoryGeometryAdjustment
CIAffineTransform
CICrop
CILanczosScaleTransform
CIPerspectiveTransform
CIPerspectiveTransformWithExtent
CIStraightenFilter
CICategoryGradient
CIGaussianGradient
CILinearGradient
CIRadialGradient
CISmoothLinearGradient
CICategoryHalftoneEffect
CICircularScreen
CICMYKHalftone
CIDotScreen
CIHatchedScreen
CILineScreen
CICategoryReduction
CIAreaAverage
CIAreaHistogram
CIRowAverage
CIColumnAverage
CIHistogramDisplayFilter
CIAreaMaximum
CIAreaMinimum
CIAreaMaximumAlpha
CIAreaMinimumAlpha
CICategorySharpen
CISharpenLuminance
CIUnsharpMask
CICategoryStylize
CIBlendWithAlphaMask
CIBlendWithMask
CIBloom
CIComicEffect
CIConvolution3X3
CIConvolution5X5
CIConvolution7X7
CIConvolution9Horizontal
CIConvolution9Vertical
CICrystallize
CIDepthOfField
CIEdges
CIEdgeWork
CIGloom
CIHeightFieldFromMask
CIHexagonalPixellate
CIHighlightShadowAdjust
CILineOverlay
CIPixellate
CIPointillize
CIShadedMaterial
CISpotColor
CISpotLight
CICategoryTileEffect
CIAffineClamp
CIAffineTile
CIEightfoldReflectedTile
CIFourfoldReflectedTile
CIFourfoldRotatedTile
CIFourfoldTranslatedTile
CIGlideReflectedTile
CIKaleidoscope
CIOpTile
CIParallelogramTile
CIPerspectiveTile
CISixfoldReflectedTile
CISixfoldRotatedTile
CITriangleKaleidoscope
CITriangleTile
CITwelvefoldReflectedTile
CICategoryTransition
CIBarsSwipeTransition
CICopyMachineTransition
CIDisintegrateWithMaskTransition
CIDissolveTransition
CIFlashTransition
CIModTransition
CIPageCurlTransition
CIPageCurlWithShadowTransition
CIRippleTransition
CISwipeTransition