GPUImage详细解析(七)文字水印和动态图像水印

回顾

GPUImage源码解析、图片模糊、视频滤镜、视频水印都已经介绍过,这次带来的是给视频添加文字水印、动态图像水印

效果展示

“我是水印”的文字,还有心形气泡组成的水印。

处理中的动态图,上面是进度,下面是文字水印:“我是水印”,动态图像水印:心形气泡。

核心思路

  • 1、UIView上面有UILabel(文字水印)和UIImageView(图片水印),再通过GPUImageUIElement把UIView对象转换成纹理对象,进入响应链;
  • 2、视频文件的图像数据通过GPUImageMovie进入响应链;
  • 3、GPUImageDissolveBlenderFilter合并水印图像和视频,把数据传给响应链的终点GPUImageView以显示到UI和GPUImageMovieWriter以写入临时文件;
  • 4、视频文件的音频数据通过GPUImageMovie传给GPUImageMovieWriter以写入临时文件;
  • 5、最后临时文件通过ALAssetsLibrary写入系统库。

具体细节

1、GPUImageUIElement

GPUImageUIElement继承GPUImageOutput类,作为响应链的源头。通过CoreGraphics把UIView渲染到图像,并通过glTexImage2D绑定到outputFramebuffer指定的纹理,最后通知targets纹理就绪。

2、GPUImageOutput和GPUImageFilter

本次demo主要用到了frameProcessingCompletionBlock属性,当GPUImageFilter渲染完纹理后,会调用frameProcessingCompletionBlock回调。

3、响应链解析

  • 1、当GPUImageMovie的纹理就绪时,会通知GPUImageFilter处理图像;
  • 2、GPUImageFilter会调用frameProcessingCompletionBlock回调;
  • 3、GPUImageUIElement在回调中渲染图像,纹理就绪后通知 GPUImageDissolveBlendFilter;
  • 4、frameProcessingCompletionBlock回调结束后,通知 GPUImageDissolveBlendFilter纹理就绪;
  • 5、GPUImageDissolveBlendFilter收到两个纹理后开始渲染,纹理就绪后通知GPUImageMovieWriter; 如图

总结

本篇的内容与上一篇视频水印有类似的地方。GPUImageUIElement是新的知识点,但是如果对CoreGraphics和OpenGL ES熟悉可以秒懂。

附上代码

思考题

思考1:响应链解析中的GPUImageFilter有什么作用?是否可以去掉? 思考2:frameProcessingCompletionBlock里面需要做什么样的操作?为什么? 思考3:能否对图像水印进行复杂的位置变换?

答案

思考1:目的是每帧回调;去掉会导致图像无法显示。 思考2:回调需要调用update操作;因为update只会输出一次纹理信息,只适用于一帧。 思考3:在回调中对UIView进行操作即可;或者使用GPUImageTransformFilter。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Material Design组件

Material Design —悬浮响应式按钮(Buttons: Floating Action Button)

77490
来自专栏儿童编程

儿童编程Scratch之“画笔”基础功能学习总结

Scratch中“画笔”功能能够让使用者模拟画笔在舞台上创作,合理运用能够给作品带来极大的趣味性。

57220
来自专栏大数据

前端女程序员教你,图片加载时,使用 SVG 作为图片 placehold

前言:使用 SVG 作为占位符不但可以减少数据大小还可以达到不错的显示效果。 不同类型的图片 placehold ? 请点击此处输入图片描述 对于图片占位符,通...

29690
来自专栏林德熙的博客

win10 uwp 毛玻璃 Compositor 创建毛玻璃win2D最简单方法

毛玻璃在UWP很简单,不会和WPF那样伤性能。 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃。

12010
来自专栏非著名程序员

Android自定义下拉刷新动画--仿百度外卖下拉刷新

? 好久没写博客了,小编之前一段时间一直在找工作,从天津来到了我们的大帝都,感觉还不错。好了废话不多说了,开始我们今天的主题吧。现如今的APP各式各样,同样也...

208100
来自专栏三流程序员的挣扎

Android 优化——应用瘦身

12310
来自专栏木头编程 - moTzxx

HTML 图片映射<map>标签整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

28940
来自专栏数据小魔方

半圆型动态仪表盘风格图表

今天跟大家分享一款半圆型动态仪表盘风格图表!真的可以动起来哦! ▼ 下午在浏览论坛的时候,刚好看到秋叶老师的一个图表教程,风格是半圆型饼图,用VBA控制。 ? ...

40860
来自专栏落影的专栏

iOS开发-视图渲染与性能优化

前言 关于iOS的视图渲染流程,以及性能优化的建议。 源于WWDC视频。 我假设你是一个这样的开发者: 了解OpenGL ES; 了解view hierar...

53770
来自专栏简书专栏

基于Excel2013的合并计算

工作组、求和、利用函数randbetween、合并计算 比如在excel表格中填入=randbetween(1,10),输入时如果需要补全要用鼠标点击,不能按...

15610

扫码关注云+社区

领取腾讯云代金券