美文网首页
GPUImage的基础应用(一):图片添加滤镜

GPUImage的基础应用(一):图片添加滤镜

作者: 见哥哥长高了 | 来源:发表于2018-10-26 09:49 被阅读64次

    闲来没事儿,就自己研究了一下GPUImage的用法。之前一直听朋友说到这个东西,就知道功能很强大,本人项目中确实没用到过,所以暂未接触。

    框架导入

    我用的cocoaPods,用法非常简单:
    新建Podfile文件
    cd 工程目录
    vim Podfile
    然后在Podfile文件中编辑:

    platform:ios,'9.0'
    
    target "LGJDemo" do
        
    pod 'GPUImage'
    
    end
    

    执行pod install 等待完成就OK了。

    用法也是非常的简单,大致过程如下:
    1、拿到一张图片
    2、创建过滤器对象,并设置需要渲染的区域
    3、根据图片获取数据源,并添加上滤镜,开始渲染
    4、获取渲染后的图片,显示出来

    图片手动添加滤镜

    其具体实现代码如下:

    //拿到图片
        NSString *path = [[NSBundle mainBundle]pathForResource:@"DSC_4156" ofType:@"jpg"];
        UIImage *inputImage = [UIImage imageWithContentsOfFile:path];
    
    //装饰图案滤镜
        GPUImageVignetteFilter *filter = [[GPUImageVignetteFilter alloc]init];
    
    //设置需要渲染的区域
        [filter forceProcessingAtSize:inputImage.size];
    
    //usingNextFrameForImageCapture代表着输出的结果会被用于获取图像
        [filter useNextFrameForImageCapture];
    
        //获取数据源
        GPUImagePicture *imageSource = [[GPUImagePicture alloc]initWithImage:inputImage];
        
        //添加上滤镜
        [imageSource addTarget:filter];
        
        //开始渲染
        [imageSource processImage];
        
        //获取渲染后的图片
        UIImage *new = [filter imageFromCurrentFramebuffer];
        
        //显示出来
        UIImageView *imageView = [[UIImageView alloc]initWithImage:new];
        imageView.frame = CGRectMake(50, 50, new.size.width, new.size.height);
        [self.view addSubview:imageView];
    

    运行以上代码就可以看到不一样的效果了。下面是添加特效之前和之后的照片对比。


    原图 GPUImageVignetteFilter
    图片自动添加滤镜
    -(void)imageAotuAddFilter{//自动添加滤镜
        NSString *path = [[NSBundle mainBundle]pathForResource:@"DSC_4156" ofType:@"jpg"];
        UIImage *image = [UIImage imageWithContentsOfFile:path];
        
        GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc]init];
        
        UIImage *currentImage = [sepiaFilter imageByFilteringImage:image];
        
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.view.frame];
        imageView.image = currentImage;
        [self.view addSubview:imageView];
    }
    
    拍照添加滤镜
    -(void)takingPicturesAddFilter{//拍照滤镜
        GPUImageStillCamera *camera = [[GPUImageStillCamera alloc]init];
        self.stillCamera = camera;
        camera.outputImageOrientation = UIInterfaceOrientationPortrait;
        
        GPUImageHazeFilter *hueFilter = [[GPUImageHazeFilter alloc]init];
        [camera addTarget:hueFilter];
        
        GPUImageView *_imageView = [[GPUImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        [self.view addSubview:_imageView];
        
        [hueFilter addTarget:_imageView];
        
        [camera startCameraCapture];
    }
    

    其实咱们只是运用了GPUImage所提供的众多过滤器中的一种,GPUImage提供的过滤器很多,下面是GPUImage所包含的类。至于添加过滤器之后的照片特效,我们可以一一尝试。

    // Base classes
    #import "GPUImageContext.h"
    #import "GPUImageOutput.h"
    #import "GPUImageView.h"
    #import "GPUImageVideoCamera.h"
    #import "GPUImageStillCamera.h"
    #import "GPUImageMovie.h"
    #import "GPUImagePicture.h"
    #import "GPUImageRawDataInput.h"
    #import "GPUImageRawDataOutput.h"
    #import "GPUImageMovieWriter.h"
    #import "GPUImageFilterPipeline.h"
    #import "GPUImageTextureOutput.h"
    #import "GPUImageFilterGroup.h"
    #import "GPUImageTextureInput.h"
    #import "GPUImageUIElement.h"
    #import "GPUImageBuffer.h"
    #import "GPUImageFramebuffer.h"
    #import "GPUImageFramebufferCache.h"
    
    // Filters
    #import "GPUImageFilter.h"
    #import "GPUImageTwoInputFilter.h"
    #import "GPUImagePixellateFilter.h"
    #import "GPUImagePixellatePositionFilter.h"
    #import "GPUImageSepiaFilter.h"
    #import "GPUImageColorInvertFilter.h"
    #import "GPUImageSaturationFilter.h"
    #import "GPUImageContrastFilter.h"
    #import "GPUImageExposureFilter.h"
    #import "GPUImageBrightnessFilter.h"
    #import "GPUImageLevelsFilter.h"
    #import "GPUImageSharpenFilter.h"
    #import "GPUImageGammaFilter.h"
    #import "GPUImageSobelEdgeDetectionFilter.h"
    #import "GPUImageSketchFilter.h"
    #import "GPUImageToonFilter.h"
    #import "GPUImageSmoothToonFilter.h"
    #import "GPUImageMultiplyBlendFilter.h"
    #import "GPUImageDissolveBlendFilter.h"
    #import "GPUImageKuwaharaFilter.h"
    #import "GPUImageKuwaharaRadius3Filter.h"
    #import "GPUImageVignetteFilter.h"
    #import "GPUImageGaussianBlurFilter.h"
    #import "GPUImageGaussianBlurPositionFilter.h"
    #import "GPUImageGaussianSelectiveBlurFilter.h"
    #import "GPUImageOverlayBlendFilter.h"
    #import "GPUImageDarkenBlendFilter.h"
    #import "GPUImageLightenBlendFilter.h"
    #import "GPUImageSwirlFilter.h"
    #import "GPUImageSourceOverBlendFilter.h"
    #import "GPUImageColorBurnBlendFilter.h"
    #import "GPUImageColorDodgeBlendFilter.h"
    #import "GPUImageScreenBlendFilter.h"
    #import "GPUImageExclusionBlendFilter.h"
    #import "GPUImageDifferenceBlendFilter.h"
    #import "GPUImageSubtractBlendFilter.h"
    #import "GPUImageHardLightBlendFilter.h"
    #import "GPUImageSoftLightBlendFilter.h"
    #import "GPUImageColorBlendFilter.h"
    #import "GPUImageHueBlendFilter.h"
    #import "GPUImageSaturationBlendFilter.h"
    #import "GPUImageLuminosityBlendFilter.h"
    #import "GPUImageCropFilter.h"
    #import "GPUImageGrayscaleFilter.h"
    #import "GPUImageTransformFilter.h"
    #import "GPUImageChromaKeyBlendFilter.h"
    #import "GPUImageHazeFilter.h"
    #import "GPUImageLuminanceThresholdFilter.h"
    #import "GPUImagePosterizeFilter.h"
    #import "GPUImageBoxBlurFilter.h"
    #import "GPUImageAdaptiveThresholdFilter.h"
    #import "GPUImageUnsharpMaskFilter.h"
    #import "GPUImageBulgeDistortionFilter.h"
    #import "GPUImagePinchDistortionFilter.h"
    #import "GPUImageCrosshatchFilter.h"
    #import "GPUImageCGAColorspaceFilter.h"
    #import "GPUImagePolarPixellateFilter.h"
    #import "GPUImageStretchDistortionFilter.h"
    #import "GPUImagePerlinNoiseFilter.h"
    #import "GPUImageJFAVoronoiFilter.h"
    #import "GPUImageVoronoiConsumerFilter.h"
    #import "GPUImageMosaicFilter.h"
    #import "GPUImageTiltShiftFilter.h"
    #import "GPUImage3x3ConvolutionFilter.h"
    #import "GPUImageEmbossFilter.h"
    #import "GPUImageCannyEdgeDetectionFilter.h"
    #import "GPUImageThresholdEdgeDetectionFilter.h"
    #import "GPUImageMaskFilter.h"
    #import "GPUImageHistogramFilter.h"
    #import "GPUImageHistogramGenerator.h"
    #import "GPUImageHistogramEqualizationFilter.h"
    #import "GPUImagePrewittEdgeDetectionFilter.h"
    #import "GPUImageXYDerivativeFilter.h"
    #import "GPUImageHarrisCornerDetectionFilter.h"
    #import "GPUImageAlphaBlendFilter.h"
    #import "GPUImageNormalBlendFilter.h"
    #import "GPUImageNonMaximumSuppressionFilter.h"
    #import "GPUImageRGBFilter.h"
    #import "GPUImageMedianFilter.h"
    #import "GPUImageBilateralFilter.h"
    #import "GPUImageCrosshairGenerator.h"
    #import "GPUImageToneCurveFilter.h"
    #import "GPUImageNobleCornerDetectionFilter.h"
    #import "GPUImageShiTomasiFeatureDetectionFilter.h"
    #import "GPUImageErosionFilter.h"
    #import "GPUImageRGBErosionFilter.h"
    #import "GPUImageDilationFilter.h"
    #import "GPUImageRGBDilationFilter.h"
    #import "GPUImageOpeningFilter.h"
    #import "GPUImageRGBOpeningFilter.h"
    #import "GPUImageClosingFilter.h"
    #import "GPUImageRGBClosingFilter.h"
    #import "GPUImageColorPackingFilter.h"
    #import "GPUImageSphereRefractionFilter.h"
    #import "GPUImageMonochromeFilter.h"
    #import "GPUImageOpacityFilter.h"
    #import "GPUImageHighlightShadowFilter.h"
    #import "GPUImageFalseColorFilter.h"
    #import "GPUImageHSBFilter.h"
    #import "GPUImageHueFilter.h"
    #import "GPUImageGlassSphereFilter.h"
    #import "GPUImageLookupFilter.h"
    #import "GPUImageAmatorkaFilter.h"
    #import "GPUImageMissEtikateFilter.h"
    #import "GPUImageSoftEleganceFilter.h"
    #import "GPUImageAddBlendFilter.h"
    #import "GPUImageDivideBlendFilter.h"
    #import "GPUImagePolkaDotFilter.h"
    #import "GPUImageLocalBinaryPatternFilter.h"
    #import "GPUImageLanczosResamplingFilter.h"
    #import "GPUImageAverageColor.h"
    #import "GPUImageSolidColorGenerator.h"
    #import "GPUImageLuminosity.h"
    #import "GPUImageAverageLuminanceThresholdFilter.h"
    #import "GPUImageWhiteBalanceFilter.h"
    #import "GPUImageChromaKeyFilter.h"
    #import "GPUImageLowPassFilter.h"
    #import "GPUImageHighPassFilter.h"
    #import "GPUImageMotionDetector.h"
    #import "GPUImageHalftoneFilter.h"
    #import "GPUImageThresholdedNonMaximumSuppressionFilter.h"
    #import "GPUImageHoughTransformLineDetector.h"
    #import "GPUImageParallelCoordinateLineTransformFilter.h"
    #import "GPUImageThresholdSketchFilter.h"
    #import "GPUImageLineGenerator.h"
    #import "GPUImageLinearBurnBlendFilter.h"
    #import "GPUImageGaussianBlurPositionFilter.h"
    #import "GPUImagePixellatePositionFilter.h"
    #import "GPUImageTwoInputCrossTextureSamplingFilter.h"
    #import "GPUImagePoissonBlendFilter.h"
    #import "GPUImageMotionBlurFilter.h"
    #import "GPUImageZoomBlurFilter.h"
    #import "GPUImageLaplacianFilter.h"
    #import "GPUImageiOSBlurFilter.h"
    #import "GPUImageLuminanceRangeFilter.h"
    #import "GPUImageDirectionalNonMaximumSuppressionFilter.h"
    #import "GPUImageDirectionalSobelEdgeDetectionFilter.h"
    #import "GPUImageSingleComponentGaussianBlurFilter.h"
    #import "GPUImageThreeInputFilter.h"
    #import "GPUImageWeakPixelInclusionFilter.h"
    

    相关文章

      网友评论

          本文标题:GPUImage的基础应用(一):图片添加滤镜

          本文链接:https://www.haomeiwen.com/subject/bqxktqtx.html