GPUIMAGE
第一部分: 安装
一. 安装: Adding the framework to your iOS project
- CoreMedia
- CoreVideo
- OpenGLES
- AVFoundation
- QuartzCore
- #import "GPUImage.h"
Building static library at the command line
- GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
- videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
- GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"CustomShader"];
- GPUImageView *filteredVideoView = [[GPUImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, viewWidth, viewHeight)];
- // Add the view somewhere so it's visible
- [videoCamera addTarget:customFilter];
- [customFilter addTarget:filteredVideoView];
- [videoCamera startCameraCapture];
- videoCamera.audioEncodingTarget = movieWriter;
- stillCamera = [[GPUImageStillCamera alloc] init];
- stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
- filter = [[GPUImageGammaFilter alloc] init];
- [stillCamera addTarget:filter];
- GPUImageView *filterView = (GPUImageView *)self.view;
- [filter addTarget:filterView];
- [stillCamera startCameraCapture];
- [stillCamera capturePhotoProcessedUpToFilter:filter withCompletionHandler:^(UIImage *processedImage, NSError *error){
- NSData *dataForPNGFile = UIImageJPEGRepresentation(processedImage, 0.8);
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSError *error2 = nil;
- if (![dataForPNGFile writeToFile:[documentsDirectory stringByAppendingPathComponent:@"FilteredPhoto.jpg"] options:NSAtomicWrite error:&error2])
- {
- return;
- }
- }];
- UIImage *inputImage = [UIImage imageNamed:@"Lambeau.jpg"];
- GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
- GPUImageSepiaFilter *stillImageFilter = [[GPUImageSepiaFilter alloc] init];
- [stillImageSource addTarget:stillImageFilter];
- [stillImageSource processImage];
- UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentlyProcessedOutput];
- GPUImageSepiaFilter *stillImageFilter2 = [[GPUImageSepiaFilter alloc] init];
- UIImage *quickFilteredImage = [stillImageFilter2 imageByFilteringImage:inputImage];
- GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"CustomShader"];
- NSString *const kfilterShader = SHADER_STRING
- (
- ...
- );
- varying highp vec2 textureCoordinate;
- uniform sampler2D inputImageTexture;
- void main()
- {
- lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
- lowp vec4 outputColor;
- outputColor.r = (textureColor.r * 0.393) + (textureColor.g * 0.769) + (textureColor.b * 0.189);
- outputColor.g = (textureColor.r * 0.349) + (textureColor.g * 0.686) + (textureColor.b * 0.168);
- outputColor.b = (textureColor.r * 0.272) + (textureColor.g * 0.534) + (textureColor.b * 0.131);
- outputColor.a = 1.0;
- gl_FragColor = outputColor;
- }
- movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
- pixellateFilter = [[GPUImagePixellateFilter alloc] init];
- [movieFile addTarget:pixellateFilter];
- NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
- unlink([pathToMovie UTF8String]);
- NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
- movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
- [pixellateFilter addTarget:movieWriter];
- movieWriter.shouldPassthroughAudio = YES;
- movieFile.audioEncodingTarget = movieWriter;
- [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];
- [movieWriter startRecording];
- [movieFile startProcessing];
- [pixellateFilter removeTarget:movieWriter];
- [movieWriter finishRecording];
第三部分, 原理
GPUImage是一个链(chain), source -> phase1 target -> phase2 target -> final target
第一个环节是source, 这是一些GPUImageOutput的子类.包括:
(1). GPUImageVideoCamera (for live video from an iOS camera)
(2.) GPUImageStillCamera (for taking photos with the camera)
(3). GPUImagePicture (for still images)
(4). GPUImageMovie (for movies). S
后续环节是被称为target. 遵循GPUImageInput protocol
可用多个source到一个target上面进行blend, 也可用进行分支, 添加多个target.
一般的target可分为两类
(1)中间环节的target, 一般是各种filter, 是GPUImageFilter或者是子类.
(2)最终环节的target, 可用是GPUImageView, 或者GPUImageMovieWriter
一个典型的例子
- GPUImageVideoCamera -> GPUImageSepiaFilter -> GPUImageView
第四部分, 内置滤镜列表
共125个滤镜, 分为四类
Color adjustments: 31 filters, 颜色处理相关
Image processing: 40 filters, 图像处理相关.
Blending modes: 29 filters, 混合模式相关.
Visual effects: 25 filters, 视觉效果相关.
下面分别列出车125个滤镜的名字, 后续再对每个专题进行讲解.
Color adjustments: 31 filters
GPUImageBrightnessFilter
GPUImageExposureFilter
GPUImageContrastFilter
GPUImageSaturationFilter
GPUImageGammaFilter
GPUImageLevelsFilter
GPUImageColorMatrixFilter
GPUImageRGBFilter
GPUImageHueFilter
GPUImageToneCurveFilter
GPUImageHighlightShadowFilter
GPUImageLookupFilter
GPUImageAmatorkaFilter
GPUImageMissEtikateFilter
GPUImageSoftEleganceFilter
GPUImageColorInvertFilter
GPUImageGrayscaleFilter
GPUImageMonochromeFilter
GPUImageFalseColorFilter
GPUImageHazeFilter
GPUImageSepiaFilter
GPUImageOpacityFilter
GPUImageSolidColorGenerator
GPUImageLuminanceThresholdFilter
GPUImageAdaptiveThresholdFilter
GPUImageAverageLuminanceThresholdFilter
GPUImageHistogramFilter
GPUImageHistogramGenerator
GPUImageAverageColor
GPUImageLuminosity
GPUImageChromaKeyFilter
Image processing: 40 filters
GPUImageTransformFilter
GPUImageCropFilter
GPUImageLanczosResamplingFilter
GPUImageSharpenFilter
GPUImageUnsharpMaskFilter
GPUImageGaussianBlurFilter
GPUImageBoxBlurFilter
GPUImageSingleComponentGaussianBlurFilter
GPUImageGaussianSelectiveBlurFilter
GPUImageGaussianBlurPositionFilter
GPUImageiOSBlurFilter
GPUImageMedianFilter
GPUImageBilateralFilter
GPUImageTiltShiftFilter
GPUImage3x3ConvolutionFilter
GPUImageSobelEdgeDetectionFilter
GPUImagePrewittEdgeDetectionFilter
GPUImageThresholdEdgeDetectionFilter
GPUImageCannyEdgeDetectionFilter
GPUImageHarrisCornerDetectionFilter
GPUImageNobleCornerDetectionFilter
GPUImageShiTomasiCornerDetectionFilter
GPUImageNonMaximumSuppressionFilter
GPUImageXYDerivativeFilter
GPUImageCrosshairGenerator
GPUImageDilationFilter
GPUImageRGBDilationFilter
GPUImageErosionFilter
GPUImageRGBErosionFilter
GPUImageOpeningFilter
GPUImageRGBOpeningFilter
GPUImageClosingFilter
GPUImageRGBClosingFilter
GPUImageLocalBinaryPatternFilter
GPUImageLowPassFilter
GPUImageHighPassFilter
GPUImageMotionDetector
GPUImageHoughTransformLineDetector
GPUImageLineGenerator
GPUImageMotionBlurFilter
Blending modes: 29 filters
GPUImageZoomBlurFilter
GPUImageChromaKeyBlendFilter
GPUImageDissolveBlendFilter
GPUImageMultiplyBlendFilter
GPUImageAddBlendFilter
GPUImageSubtractBlendFilter
GPUImageDivideBlendFilter
GPUImageOverlayBlendFilter
GPUImageDarkenBlendFilter
GPUImageLightenBlendFilter
GPUImageColorBurnBlendFilter
GPUImageColorDodgeBlendFilter
GPUImageScreenBlendFilter
GPUImageExclusionBlendFilter
GPUImageDifferenceBlendFilter
GPUImageHardLightBlendFilter
GPUImageSoftLightBlendFilter
GPUImageAlphaBlendFilter
GPUImageSourceOverBlendFilter
GPUImageColorBurnBlendFilter
GPUImageColorDodgeBlendFilter
GPUImageNormalBlendFilter
GPUImageColorBlendFilter
GPUImageHueBlendFilter
GPUImageSaturationBlendFilter
GPUImageLuminosityBlendFilter
GPUImageLinearBurnBlendFilter
GPUImagePoissonBlendFilter
GPUImageMaskFilter
Visual effects: 25 filters
GPUImagePixellateFilter
GPUImagePolarPixellateFilter
GPUImagePolkaDotFilter
GPUImageHalftoneFilter
GPUImageCrosshatchFilter
GPUImageSketchFilter
GPUImageThresholdSketchFilter
GPUImageToonFilter
GPUImageSmoothToonFilter
GPUImageEmbossFilter
GPUImagePosterizeFilter
GPUImageSwirlFilter
GPUImageBulgeDistortionFilter
GPUImagePinchDistortionFilter
GPUImageStretchDistortionFilter
GPUImageSphereRefractionFilter
GPUImageGlassSphereFilter
GPUImageVignetteFilter
GPUImageKuwaharaFilter
GPUImageKuwaharaRadius3Filter
GPUImagePerlinNoiseFilter
GPUImageCGAColorspaceFilter
GPUImageMosaicFilter
GPUImageJFAVoronoiFilter
GPUImageVoronoiConsumerFilter