PAG官网 | PAG动效

PAG官网 | PAG动效

  • 首页
  • 产品
  • 功能
  • 文档
  • 案例
  • GitHub
  • 官方论坛
  • 免费下载

›Web进阶

PAG 介绍

  • 产品介绍
  • 使用流程
  • 常见问题

快速开始

  • 安装 PAGViewer
  • 安装 AE 导出插件
  • 导出 PAG 文件

SDK快速接入

  • 移动端接入指南
  • 桌面端接入指南
  • Web端接入指南
  • 小程序端接入指南

导出插件

  • 插件选项配置面板
  • AE 导出提示
  • BMP 预合成导出
  • PAG 填充模式
  • PAG 时间伸缩
  • 导出面板快捷键设置
  • 导出错误码说明
  • AE 导出自动检测规则
  • 文本制作规则
  • 如何添加文本背景框
  • 如何在 AE 中导出音频

预览工具

  • 使用 PAGViewer 编辑预览图层
  • 使用 PAGViewer 查看 PAG 文件结构
  • PAGViewer 快捷键说明
  • 使用 beta 版本的 PAGViewer
  • 从 PAG 导出其他图片格式

性能优化

  • 使用性能监测面板
  • PAG 素材优化指南

API参考

  • iOS API文档
  • Android API文档
  • Web API文档

移动端进阶

  • UI场景及列表播放优化
  • 占位图替换视频
  • 播放有声素材
  • 使用加密素材
  • 导出视频文件
  • SDK 鉴权

Web进阶

  • 平台特性
  • 安装
  • 加载 PAG 文件
  • 播放动效
  • 兼容性情况
  • 自适应
  • WebWroker 版本

素材迁移

  • Lottie 迁移指南
  • 素材迁移说明
  • PAG SDK 迁移指南

视频教程

  • PAG 制作与性能优化培训视频
  • PAG 新版导出插件面板培训视频
  • 线上答疑

文件格式

  • PAG 文件格式规范

WebWroker 版本


当前为 alpha 版本,欢迎使用与反馈🎉

兼容性:仅支持 Chrome 69+ 浏览器

为满足同屏播放多个 PAG 动效的复杂场景,与避免 PAG 进行渲染时阻塞主线程。
从 libpag@4.2 + 版本开始,libpag.js 允许在 WebWorker 中运行,并且打包产物中新增 libpag.worker.js 为 WebWorker版本主线程入口。

入口

初始化

libpag.worker.js 做为主线程入口,可以引入它的 createPAGWorker 进行 libpag 的初始化。

import { createPAGWorker } from 'libpag.worker.esm.js';
const worker = await createPAGWorker({
  locateFile: (file) => {
    if (file === 'libpag.wasm') {
      return 'lib/libpag.wasm';
    }
    if (file === 'libpag.js') {
      return 'lib/libpag.min.js';
    }
    return file;
  },
});

createPAGWorker 接收的参数与 PAGInit 一致,除 Emscripten 的初始化参数外,包括一个 locateFile 钩子,以供开发者自行指定 wasm 文件和 worker 运行 JS 文件的 path。

需要注意的是,createPAGWorker 返回的是一个 Worker 对象,并不是一个 PAG 对象。

并且同个 WebWorker 中只能存在 4 个 WebGL Active Context,所以请避免在一个 WebWorker 中初始化 4 个以上 PAGView。当然上述条件可以搭配 useCanvas2D 属性,进行规避。

快速开始

为了开发者能快速地开始使用 WebWorker 版本,我们在 libpag.worker.js 文件中封装了 WebWorker 专用的 WorkerPAGFile WorkerPAGImage 和 WorkerPAGView 类。

这几个类中,包括了如播放,替换文字,替换图片等常见的接口,更高级的用法见下文进阶开发。

播放:

import { WorkerPAGFile, WorkerPAGView } from 'libpag.worker.esm.js';

const buffer = await fetch('../assets/test.pag').then((res) => res.arrayBuffer());
const canvas = document.createElement('canvas');
canvas.width = 300;
canvas.height = 300;
document.body.appendChild(canvas);

const pagFile = await WorkerPAGFile.load(worker, buffer);
const pagView = await WorkerPAGView.init(pagFile, canvas);
if (pagView) {
   pagView.play();
}

替换文字:

import { WorkerPAGFile } from 'libpag.worker.esm.js';

const pagFile = await WorkerPAGFile.load(worker, buffer);
const textData = await pagFile.getTextData(0);
textData.text = "Hello World!"
await pagFile.replaceText(0, textData);

替换图片:

import { WorkerPAGImage } from 'libpag.worker.esm.js';

const image = await new Promise((resolve) => {
  const img = new Image();
  img.onload = () => resolve(img);
  img.src = '../assets/cat.png';
});

const pagImage = await WorkerPAGImage.fromSource(worker, image);
pagFile.replaceImage(0, pagImage);
pagImage.destroy();

完整示例:https://github.com/libpag/pag-web/blob/main/pages/web-worker.html

高级用法

libpag.worker.js 中封装了比较常用的简单 API,如果开发者有更多复杂需求,建议将逻辑写在 WebWorker 中的 libpag.js 中。这样不但减少主线程与 WebWorker 的重复通信,造成性能损失,也避免将所有 libpag.js 中的接口二次封装到 libpag.worker.js 中出现冗余体积。

← 自适应Lottie 迁移指南 →
  • 入口
    • 初始化
    • 快速开始
  • 高级用法
公司地址:广东省深圳市南山区海天二路33号腾讯滨海大厦
联系电话:0755-86013388
QQ群:893379574
备案号:粤B2-20090059
Copyright © 2018 - 2023 Tencent. All Rights Reserved.
隐私政策

粤公网安备 44030502009351号

Copyright © 2018 - 2023 Tencent. All Rights Reserved.
公司地址:广东省深圳市南山区海天二路33号腾讯滨海大厦
联系电话:0755-86013388
QQ群:893379574
隐私政策
备案号:粤B2-20090059

粤公网安备 44030502009351号