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

标签 javascript gif animated-gif sprite-sheet pixi.js

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

我有一个 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 的任何建议都可能有用。

最佳答案

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

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

分离帧的过程是:

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

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

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

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

关于javascript - Pixi.js 从动画 gif 文件生成 SpriteSheet 动画或 MovieClip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716579/

相关文章:

javascript - HTML Accordion 填充

javascript - 使用播放列表参数嵌入youtube视频

javascript - 单击正向动画 单击反向动画

ios - 使用 UIImages 创建 gif

jquery - Gif 在移动设备中无限循环,即使设置为循环一次

c# - 来自解码的 .gif 的不完整图像

javascript - 如何使用 jQuery 或 Javascript 禁用页面上的元素

java - 调整动画 GIF 的大小,同时使用 java 保持它的动画

c# - 将带有动画元素的 C# winforms Panel 或 PictureBox 保存到 gif 文件?

java - 如何控制 GIF 动画的速度?