pag logo

前言

Jaco 中大量用到了 pag 动画,今天我们就来盘一盘 pag 的源代码。

libpag 地址在这里

目录结构

大概是这样:


libpag/
├── src/                    # 核心源代码
├── include/               # 公共 API 头文件
├── third_party/           # 第三方依赖
├── test/                  # 测试代码和资源
├── resources/             # 测试资源文件
├── web/                   # Web 平台实现
├── ios/                   # iOS 平台项目
├── android/              # Android 平台项目
├── mac/                  # macOS 平台项目
├── ohos/                 # OpenHarmony 平台项目
├── linux/                # Linux 平台支持
├── win/                  # Windows 平台项目
├── viewer/               # PAG 查看器应用
├── exporter/             # After Effects 导出器
├── vendor/               # 供应商特定代码
├── tgfx/                 # TGFX 图形库(符号链接)
├── assets/               # 项目资源文件
└── .github/              # GitHub 配置

具体功能:

src/base/

作用: 基础数据结构和动画元素定义

keyframes/: 关键帧动画系统,处理各种属性的时间插值
shapes/: 矢量形状定义(椭圆、矩形、路径、星形等)
text/: 文本渲染相关(字体、段落、文字样式)
effects/: 视觉效果(模糊、发光、阴影等 AE 效果)
layerStyles/: 图层样式(描边、填充、渐变等)
utils/: 基础工具类(数学运算、矩阵变换、颜色处理)

src/codec/

作用: PAG 文件格式编解码

tags/: PAG 文件标签解析器,每个标签对应一种数据类型
mp4/: MP4 容器格式支持,用于视频预合成
utils/: 编解码工具(数据流读写、压缩解压)

src/rendering/

作用: 渲染引擎核心


layers/: 各种图层类型的渲染实现
ShapeLayer: 矢量形状图层
TextLayer: 文本图层
ImageLayer: 图片图层
SolidLayer: 纯色图层
PreComposeLayer: 预合成图层
filters/: GPU 滤镜和特效处理
video/: 视频解码和播放
sequences/: 序列帧管理
graphics/: 图形绘制基础设施
caches/: 渲染缓存系统(纹理、路径、字形缓存)
drawables/: 可绘制对象抽象
editing/: 运行时编辑功能
renderers/: 不同渲染器实现
utils/: 渲染工具类

src/platform/

作用: 平台特定实现

android/: Android NDK/JNI 绑定,硬件解码器接口
ios/: iOS 框架集成,Metal/OpenGL 支持
mac/: macOS 特定功能,视频工具箱集成
cocoa/: iOS/macOS 共享的 Objective-C++ 代码
web/: WebAssembly 绑定,Canvas/WebGL 接口
win/: Windows 平台支持,DirectX/ANGLE 集成
ohos/: OpenHarmony 平台适配
linux/: Linux 平台基础支持
qt/: Qt 框架集成(跨平台 GUI)
swiftshader/: 软件渲染器支持

源代码很难跑起来,我们要想使用他的话,还是下一个针对 iOS 的 demo。地址在这里:https://github.com/libpag/pag-ios

开始

iOS 项目一览

运行 Demo 后,我们可以看到如下页面:
pag ios demo

可以看到他的功能比较强大,我们只需要一个 pag 文件,然后代码中加载即可。

参考

pag 官网