使用CoreImage教程
使用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

浙公网安备 33010602011771号