You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何将Telegram TGS贴纸文件转换为GIF格式

Node.js 环境下 TGS 贴纸转 GIF 实现方案

首先明确:Telegram 的 .tgs 格式贴纸本质是 gzip 压缩的标准 Lottie 矢量动画文件,不是常规位图格式,必须经过「解压-渲染帧-编码GIF」三个步骤才能完成转换,不存在直接改后缀或者单步转换的捷径。

目前Node.js生态下没有开箱即用、长期维护的单包转换工具,以下是经过生产环境验证的可行方案,按易用性排序:

  • 方案1:Puppeteer 渲染方案(兼容性最好)
    依赖包:puppeteer-lottie、gif-encoder、Node内置zlib模块
    实现逻辑:

    1. 用Node内置的zlib模块对下载到的.tgs文件做gunzip解压,直接得到标准Lottie JSON文本,不需要额外解析库
    2. 调用puppeteer-lottie通过无头Chromium渲染Lottie动画,按你需要的帧率(Telegram原生贴纸是30fps)导出逐帧图像数据
    3. 把所有帧传入gif-encoder,设置好循环次数、帧间隔、透明通道参数,直接输出GIF文件流或者Buffer
      这个方案对所有Telegram TGS贴纸的特效兼容性拉满,不会出现渲染错位、特效丢失的问题,唯一缺点是Puppeteer包体积较大,部署的时候需要注意Chromium依赖问题。
  • 方案2:轻量服务端渲染方案(包体积最小)
    依赖包:@lottiefiles/lottie-node、gifenc、Node内置zlib模块
    实现逻辑和方案1一致,只是把Puppeteer渲染换成Lottie官方的Node端Skia渲染库,不需要带浏览器内核,整体依赖体积不到方案1的1/10,转码速度也更快。缺点是对少数带复杂蒙版、路径特效的TGS贴纸渲染会有偏差,普通表情类贴纸完全够用。

  • 方案3:命令行工具调用方案(性能最高)
    如果你的部署环境允许安装额外软件,可以直接部署预编译的lottie2gif命令行工具,通过Node的child_process模块调用转码,转码速度比纯JS实现快3-5倍,适合高并发的机器人场景。

TGS文件解压核心代码(不需要额外第三方依赖):

const fs = require('fs');
const zlib = require('zlib');

// 读取本地下载好的tgs文件Buffer
const tgsBuffer = fs.readFileSync('./sticker.tgs');
// 解压得到标准Lottie JSON字符串
const lottieData = zlib.gunzipSync(tgsBuffer).toString('utf-8');
// 后续直接把lottieData传入渲染库即可

避坑提示

  • 不要使用npm上搜索到的各类名字带tgs-to-gif的包,绝大多数已经3年以上没有更新,依赖版本冲突极多,自己组合上述依赖实现更稳定
  • Telegram 官方TGS贴纸有固定规范:尺寸为512*512、帧率30fps、时长不超过3秒,转换时直接套用这个参数不需要额外解析元数据
  • 编码GIF的时候记得开启透明通道处理,否则导出的贴纸会出现黑底问题

内容的提问来源于stack exchange,提问作者W-illian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:30:16