Pixi.js 从动画 gif 文件生成 SpriteSheet Animation 或 MovieClip

Posted

技术标签:

【中文标题】Pixi.js 从动画 gif 文件生成 SpriteSheet Animation 或 MovieClip【英文标题】:Pixi.js generate SpriteSheet Animation or MovieClip from an animated gif file 【发布时间】:2015-02-27 06:36:01 【问题描述】:

我正在制作一款游戏,允许玩家链接到自己的 gif 图像并立即使它们在游戏中可玩,并且需要将动画 .gif 文件转换为 spritesheets。

我有一个 jsfiddle 可以将您过去的任何图像加载到输入中,但它只加载第一帧:

http://jsfiddle.net/40k7g0cL/

var animatedGif = PIXI.Sprite.fromImage('http://i.imgur.com/egzJbiI.gif');

但 pixi.js 资源加载器似乎只能加载动画 .gif 文件的第一帧,而不能加载其余部分。

我能找到的关于这个主题的所有信息都说我应该提前将动画 .gif 文件转换为 SpriteSheet,但是这是不可能的,因为播放器将在播放时提供 .gif 图像,所以我无法提前对它们进行预处理。

是否有一种简单的方法来加载动画 .gif 图像,使其自动转换为 SpriteSheet 或 MovieClip 甚至是纹理对象数组?

如果 pixi.js 中没有简单的解决方案,我是否需要编写自己的插件,或者使用类似 jsgif 的东西来处理 .gif 并手动分隔每个帧?

任何关于如何从浏览器中的动画 .gif 客户端(在 javascript 中)生成 SpriteSheet 的建议都可能有用。

【问题讨论】:

我知道你想在浏览器中使用,但是你也可以使用一个不错的服务试试cloudinary.com/cookbook/… 【参考方案1】:

抱歉,没有办法直接用 pixi.js 实现。

正如您所建议的,似乎 jsgif 是客户端 javascript 的唯一低级实现 gif。此外,还有一个名为 libgif-js 的分支,更易于分析,它可以为构建 SpriteSheet 提供线索。

分离框架的过程是:

加载图像数据。 如果您的应用在线,您必须使用 File API (see here) 来读取本地文件。 您将获得带有 gif 原始数据的 ArrayBufferString,可以将其传递给 new Stream(data)

解析数据: 致电parseGIF(stream, handler)。第二个库有助于理解这个过程。 自定义处理程序和回调以获得您需要的内容(宽度、高度、帧...)。

根据您的规则创建 SpriteSheet: 如果您选择将帧保存为ImageData,请使用隐藏画布(可以与解析中的相同)将它们绘制在正确的位置以形成您的 SpriteSheet。

获取最终图像并使用它: 例如,您可以使用canvas.toDataURL(*format*)(首先,将画布大小调整为 SpriteSheet 尺寸)将图像作为 base64 url​​。

【讨论】:

以上是关于Pixi.js 从动画 gif 文件生成 SpriteSheet Animation 或 MovieClip的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spine 动画添加到 Phaser 游戏?

如何从多个 png 图像创建动画 gif 图像?

从 FrameLayout 生成 GIF

PHP - 从两个 JPEG 图像创建简单的动画 GIF?

从 PIXI.js 中的同级或父 DOM 元素捕获鼠标事件

如何从控制台中删除 pixi.js 横幅?