美文网首页
IOS OpenGL ES GPUImage 图像叠加 GPUI

IOS OpenGL ES GPUImage 图像叠加 GPUI

作者: 猿说编程 | 来源:发表于2022-08-04 22:41 被阅读0次

    目录

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 特效

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 函数

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES GPUImage 使用

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES GLSL 编程

    一.简介

    GPUImage 共 125 个滤镜, 分为四类

    1、Color adjustments : 31 filters , 颜色处理相关
    2、Image processing : 40 filters , 图像处理相关.
    3、Blending modes : 29 filters , 混合模式相关.
    4、Visual effects : 25 filters , 视觉效果相关.

    GPUImageOverlayBlendFilter 属于 GPUImage 图像混合模式相关,用于图像叠加。shader 源码如下:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:IOS – OpenGL ES GPUImage GPUImageOverlayBlendFilter
    //@Time:2022/07/02 06:30
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
    NSString *const kGPUImageOverlayBlendFragmentShaderString = SHADER_STRING
    (
     varying highp vec2 textureCoordinate;
     varying highp vec2 textureCoordinate2;
    
     uniform sampler2D inputImageTexture;
     uniform sampler2D inputImageTexture2;
    
     void main()
     {
         mediump vec4 base = texture2D(inputImageTexture, textureCoordinate);
         mediump vec4 overlay = texture2D(inputImageTexture2, textureCoordinate2);
    
         mediump float ra;
         if (2.0 * base.r < base.a) {
             ra = 2.0 * overlay.r * base.r + overlay.r * (1.0 - base.a) + base.r * (1.0 - overlay.a);
         } else {
             ra = overlay.a * base.a - 2.0 * (base.a - base.r) * (overlay.a - overlay.r) + overlay.r * (1.0 - base.a) + base.r * (1.0 - overlay.a);
         }
    
         mediump float ga;
         if (2.0 * base.g < base.a) {
             ga = 2.0 * overlay.g * base.g + overlay.g * (1.0 - base.a) + base.g * (1.0 - overlay.a);
         } else {
             ga = overlay.a * base.a - 2.0 * (base.a - base.g) * (overlay.a - overlay.g) + overlay.g * (1.0 - base.a) + base.g * (1.0 - overlay.a);
         }
    
         mediump float ba;
         if (2.0 * base.b < base.a) {
             ba = 2.0 * overlay.b * base.b + overlay.b * (1.0 - base.a) + base.b * (1.0 - overlay.a);
         } else {
             ba = overlay.a * base.a - 2.0 * (base.a - base.b) * (overlay.a - overlay.b) + overlay.b * (1.0 - base.a) + base.b * (1.0 - overlay.a);
         }
    
         gl_FragColor = vec4(ra, ga, ba, 1.0);
     }
    );
    #else
    NSString *const kGPUImageOverlayBlendFragmentShaderString = SHADER_STRING
    (
     varying vec2 textureCoordinate;
     varying vec2 textureCoordinate2;
    
     uniform sampler2D inputImageTexture;
     uniform sampler2D inputImageTexture2;
    
     void main()
     {
         vec4 base = texture2D(inputImageTexture, textureCoordinate);
         vec4 overlay = texture2D(inputImageTexture2, textureCoordinate2);
    
         float ra;
         if (2.0 * base.r < base.a) {
             ra = 2.0 * overlay.r * base.r + overlay.r * (1.0 - base.a) + base.r * (1.0 - overlay.a);
         } else {
             ra = overlay.a * base.a - 2.0 * (base.a - base.r) * (overlay.a - overlay.r) + overlay.r * (1.0 - base.a) + base.r * (1.0 - overlay.a);
         }
    
         float ga;
         if (2.0 * base.g < base.a) {
             ga = 2.0 * overlay.g * base.g + overlay.g * (1.0 - base.a) + base.g * (1.0 - overlay.a);
         } else {
             ga = overlay.a * base.a - 2.0 * (base.a - base.g) * (overlay.a - overlay.g) + overlay.g * (1.0 - base.a) + base.g * (1.0 - overlay.a);
         }
    
         float ba;
         if (2.0 * base.b < base.a) {
             ba = 2.0 * overlay.b * base.b + overlay.b * (1.0 - base.a) + base.b * (1.0 - overlay.a);
         } else {
             ba = overlay.a * base.a - 2.0 * (base.a - base.b) * (overlay.a - overlay.b) + overlay.b * (1.0 - base.a) + base.b * (1.0 - overlay.a);
         }
    
         gl_FragColor = vec4(ra, ga, ba, 1.0);
     }
    );
    #endif
    

    二.效果演示

    使用 GPUImageOverlayBlendFilter**,**源图和目标图如下:

    使用 GPUImageOverlayBlendFilter 效果如下:

    三.源码下载

    OpenGL ES Demo 下载地址 : IOS OpenGL ES GPUImage 图像叠加 GPUImageOverlayBlendFilter

    四.猜你喜欢

    1. IOS OPenGL ES 设置图像亮度 GPUImageBrightnessFilter
    2. IOS OPenGL ES 调节图像曝光度 GPUImageExposureFilter
    3. IOS OpenGL ES 调节图像对比度 GPUImageContrastFilter
    4. IOS OPenGL ES 调节图像饱和度 GPUImageSaturationFilter
    5. IOS OPenGL ES 调节图像伽马线 GPUImageGammaFilter
    6. IOS OpenGL ES 调节图像反色 GPUImageColorInvertFilter
    7. IOS OpenGL ES 调节图像褐色 GPUImageSepiaFilter
    8. IOS OpenGL ES 调节图像灰色 GPUImageGrayscaleFilter
    9. IOS OpenGL ES 调节图像 RGB 通道 GPUImageRGBFilter
    10. IOS OpenGL ES 调节图像不透明度 GPUImageOpacityFilter
    11. IOS OpenGL ES 调节图像阴影 GPUImageHighlightShadowFilter
    12. IOS OpenGL ES 调节图像色彩替换 GPUImageFalseColorFilter
    13. GPUImage – 色彩直方图 GPUImageHistogramFilter
    14. GPUImage – 色彩直方图 GPUImageHistogramGenerator
    15. GPUImage – 像素平均色值 GPUImageAverageColor
    16. GPUImage – 亮度平均 GPUImageLuminosity
    17. IOS OpenGL ES 调节图像色度 GPUImageHueFilter
    18. IOS OpenGL ES 指定颜色抠图 GPUImageChromaKeyFilter
    19. IOS OpenGL ES 调节图像白平衡/色温 GPUImageWhiteBalanceFilter
    20. IOS OpenGL ES 设置图像 lookup 滤镜 GPUImageLookupFilter
    21. IOS OpenGL ES 设置图像滤镜 GPUImageAmatorkaFilter
    22. IOS OpenGL ES 设置图像滤镜 GPUImageSoftEleganceFilter
    23. IOS OpenGL ES 设置图像锐化 GPUImageSharpenFilter
    24. IOS OpenGL ES 绘制十字 GPUImageCrosshairGenerator
    25. IOS OpenGL ES 绘制线条 GPUImageLineGenerator
    26. IOS OpenGL ES 设置图像黑白燥点 GPUImageLocalBinaryPatternFilter
    27. IOS OpenGL ES 设置图像卡通效果(黑色粗线描边) GPUImageToonFilter
    28. IOS OpenGL ES 桑原滤波/水粉画模糊效果 GPUImageKuwaharaFilter
    29. IOS OpenGL ES 黑白马赛克效果 GPUImageMosaicFilter
    30. IOS OpenGL ES 像素化马赛克效果 GPUImagePixellateFilter
    31. IOS OpenGL ES 同心圆像素化马赛克效果 GPUImagePolarPixel
    32. IOS OpenGL ES 黑白网状效果 GPUImageCrosshatchFilter
    33. IOS OpenGL ES 色彩丢失/模糊效果 GPUImageColorPackingFilter
    34. IOS OpenGL ES 图像晕影 GPUImageVignetteFilter
    35. IOS OpenGL ES 图像漩涡 GPUImageSwirlFilter
    36. IOS OpenGL ES 图像鱼眼扩散效果 GPUImageBulgeDistortionFilter
    37. IOS OpenGL ES 图像鱼眼移动效果 GPUImageBulgeDistortionFilter
    38. IOS OpenGL ES 图像凹面镜移动效果 GPUImagePinchDistortionFilter
    39. IOS OpenGL ES 图像凹面镜放大效果 GPUImagePinchDistortionFilter
    40. IOS OpenGL ES 图像哈哈镜效果 GPUImageStretchDistortionFilter
    41. IOS OpenGL ES 图像水晶球效果 GPUImageGlassSphereFilter
    42. IOS OpenGL ES 图像球形折射 GPUImageSphereRefractionFilter
    43. IOS OpenGL ES 图像色调分离噪点效果 GPUImagePosterizeFilter
    44. IOS OpenGL ES 图像 CGA 色彩滤镜 GPUImageCGAColorspaceFilter
    45. IOS OpenGL ES 图像柏林噪点/花边噪点 GPUImagePerlinNoiseFilter
    46. IOS OpenGL ES 图像加亮边缘 GPUImage3x3ConvolutionFilter
    47. IOS OpenGL ES 图像浮雕 3d 效果 GPUImageEmbossFilter
    48. IOS OpenGL ES 图像马赛克圆点 GPUImagePolkaDotFilter
    49. IOS OpenGL ES 图像侵蚀边缘黑白模糊 GPUImageErosionFilter
    50. IOS OpenGL ES 图像侵蚀边缘色彩模糊 GPUImageRGBErosionFilter
    51. IOS OpenGL ES 图像扩展边缘黑白模糊 GPUImageDilationFilter
    52. IOS OpenGL ES 图像扩展边缘彩色模糊 GPUImageRGBDilationFilter
    53. IOS OpenGL ES GPUImage 黑白色调模糊 GPUImageOpeningFilter
    54. IOS OpenGL ES GPUImage 彩色模糊 GPUImageRGBOpeningFilter
    55. IOS OpenGL ES GPUImage 图像黑白色调模糊/暗色提亮 GPUImageClosingFilter
    56. IOS OpenGL ES GPUImage 图像彩色调模糊/暗色提亮 GPUImageRGBClosingFilter
    57. IOS OpenGL ES GPUImage 图像 Lanczos 重取样模糊效果 GPUImageLanczosResamplingFilter
    58. IOS OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilter
    59. IOS OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageThresholdedNonMaximumSuppressionFilter
    60. IOS OpenGL ES GPUImage 图像 Sobel 边缘检测,类似漫画反色 GPUImageSobelEdgeDetectionFilter
    61. IOS OpenGL ES GPUImage GPUImageWeakPixelInclusionFilter
    62. IOS OpenGL ES GPUImage GPUImageDirectionalNonMaximumSuppressionFilter
    63. IOS OpenGL ES GPUImage 图像阈值边缘检测 GPUImageThresholdEdgeDetectionFilter
    64. IOS OpenGL ES GPUImage 图像普瑞维特(Prewitt)边缘检测 GPUImagePrewittEdgeDetectionFilter
    65. IOS OpenGL ES GPUImage 图像 XYDerivative 边缘检测 GPUImageXYDerivativeFilter
    66. IOS OpenGL ES GPUImage 图像阀值素描,形成有噪点的素描 GPUImageThresholdSketchFilter
    67. IOS OpenGL ES GPUImage 图像阴影和深度效果 GPUImageMultiplyBlendFilter
    68. IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter
    69. IOS OpenGL ES GPUImage 图像透明混合 GPUImageAlphaBlendFilter
    70. IOS OpenGL ES GPUImage 图像溶解 GPUImageDissolveBlendFilter
    71. IOS OpenGL ES GPUImage 图像叠加 GPUImageOverlayBlendFilter

    本文由博客 - 猿说编程 猿说编程 发布!

    相关文章

      网友评论

          本文标题:IOS OpenGL ES GPUImage 图像叠加 GPUI

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