使用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转换成CIImage CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"1.jpg"]]; // 创建滤镜 CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectMono" keysAndValues:kCIInputImageKey, ciImage, nil]; [filter setDefaults]; // 获取绘制上下文 CIContext *context = [CIContext contextWithOptions:nil]; // 渲染并输出CIImage CIImage *outputImage = [filter outputImage]; // 创建CGImage句柄 CGImageRef cgImage = [context createCGImage:outputImage fromRect:[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转换成CIImage CIImage *ciImage = [[CIImage alloc] initWithImage:image]; // 创建滤镜 CIFilter *filter = [CIFilter filterWithName:name keysAndValues:kCIInputImageKey, ciImage, nil]; [filter setDefaults]; // 获取绘制上下文 CIContext *context = [CIContext contextWithOptions:nil]; // 渲染并输出CIImage CIImage *outputImage = [filter outputImage]; // 创建CGImage句柄 CGImageRef cgImage = [context createCGImage:outputImage fromRect:[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
CICategoryBlur
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
CICategoryHalftoneEffect
CICategoryReduction
-
CIAreaAverage
-
CIAreaHistogram
-
CIRowAverage
-
CIColumnAverage
-
CIHistogramDisplayFilter
-
CIAreaMaximum
-
CIAreaMinimum
-
CIAreaMaximumAlpha
-
CIAreaMinimumAlpha
CICategorySharpen
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