GPU accelerated filters for iOS based on OpenGL.
New feature: Face effects will be created with the ios11's VNSequenceRequestHandler & VNDetectFaceLandmarksRequest.
Android version: https://github.com/wysaid/android-gpuimage-plus
- 
This repo is open source now. You can use cge.framework in your project.
- You can add the cge.framework to your project, then add the code
 
#import <cge/cge.h> //Everything is done.
- If you're using CocoaPods, add this to your Podfile:
 
pod 'cge', :git => 'https://github.com/wysaid/ios-gpuimage-plus.git'
or with the latest static library:
pod 'cge', :git => 'https://github.com/wysaid/ios-gpuimage-plus-pod.git', :tag => '2.5.1'
Dependencies: libc++, ImageIO.framework, MobileCoreServices.framework
Note: The filters are written in C++, so you should change your source file extensions to "mm" if you want use all features. But it is not necessary when you're using the interface-headers just like the demo.
 - 
Hundreds of built-in filters are available in the demo. 😋If you'd like to add your own filter, please take a look at the manual page. Or you can follow the demo code. The new custom filters should be written in C++.
 - 
To build the source code, you can use the xcode project in the 'library' folder.
 
Sample Code for doing a filter with UIImage
//Simply apply a filter to an UIImage.
- (void)viewDidLoad
{
    UIImage* srcImage = [UIImage imageNamed:@"test.jpg"];
    //HSL Adjust (hue: 0.02, saturation: -0.31, luminance: -0.17)
    //Please see the manual for more details.
    const char* ruleString = @"@adjust hsl 0.02 -0.31 -0.17";
    UIImage* resultImage = cgeFilterUIImage_MultipleEffects(srcImage, ruleString, 1.0f, nil);
    //Then the dstImage is applied with the filter.
    //It's so convenient, isn't it?
}
Your filter must inherit CGEImageFilterInterfaceAbstract or its child class. Most of the filters are inherited from CGEImageFilterInterface because it has many useful functions.
// A simple customized filter to do a color reversal.
class MyCustomFilter : public CGE::CGEImageFilterInterface
{
public:
    
    bool init()
    {
        CGEConstString fragmentShaderString = CGE_SHADER_STRING_PRECISION_H
        (
        varying vec2 textureCoordinate;  //defined in 'g_vshDefaultWithoutTexCoord'
        uniform sampler2D inputImageTexture; // the same to above.
        void main()
        {
            vec4 src = texture2D(inputImageTexture, textureCoordinate);
            src.rgb = 1.0 - src.rgb;  //Simply reverse all channels.
            gl_FragColor = src;
        }
        );
        //m_program is defined in 'CGEImageFilterInterface'
        return m_program.initWithShaderStrings(g_vshDefaultWithoutTexCoord, s_fsh);
    }
    //void render2Texture(CGE::CGEImageHandlerInterface* handler, GLuint srcTexture, GLuint vertexBufferID)
    //{
    //  //Your own render functions here.
    //  //Do not override this function to use the CGEImageFilterInterface's.
    //}
};
Note: To add your own shader filter with c++. Please see the demo for further details.
Please see this: https://github.com/wysaid/ios-gpuimage-plus/blob/master/library/filterLib/cgeCustomFilters.h#L34
En: https://github.com/wysaid/android-gpuimage-plus/wiki/Parsing-String-Rule-En
Ch: https://github.com/wysaid/android-gpuimage-plus/wiki/Parsing-String-Rule
Some utils are available for creating filters: https://github.com/wysaid/cge-tools
Alipay:
Paypal:


