使用 css 信息绘制多个 gif 文件

Posted

技术标签:

【中文标题】使用 css 信息绘制多个 gif 文件【英文标题】:Sprite multiple gif files with css info 【发布时间】:2016-09-10 09:28:34 【问题描述】:

所以我有一个包含很多 gif 文件的网站(具体来说是笑脸)。为了优化加载性能,我决定将请求数量减少到一个,将所有 gif 文件加载为一个文件。

我发现最好的选择是创建一个单独的 sprite 文件。还有一个 ImageMagic 程序对此有很大帮助,并且有很棒的wiki。经过几个小时的修补,我发现了以下内容:

    我需要保留动画,而不仅仅是将静态图像作为精灵结果,因此每个 gif 将被存储为多个图像,然后使用 playkeyframes 作为 here 进行动画处理 我可以使用montage *.gif sprites.png轻松生成精灵文件 我还需要一些关于图像开始和结束坐标的信息。由于我的 gif 文件每个都有不同的高度和宽度,在我手动完成输入尺寸之前,我会被折磨得死去活来。我发现的最佳选择是使用 ImageMagick 生成一个与 png 参数相同的 html 文件。 Html 文件包含每个 gif 文件的开始和结束坐标的区域,我可以用来创建 css。一个例子:<area href="./base/0000.gif" shape="rect" coords="0,0,89,39" alt="" /> ImageMagick montagetile x1 参数会创建一个巨大的宽图像(例如 200 个 gif,每个 20 个部分 x 40 像素 = ~ 160000 像素 x 40 像素),这会使浏览器崩溃。因此,我需要将其设置为多行和多列,这会使我的 css 计算复杂化。 即使知道开始和结束位置,我仍然需要手动计算。从坐标我可以计算animationsteps css(如果 Y 坐标在一行中,则为 X2-X1/[gif.width]),但我仍然不知道它的速度。此外,如果 sprite 图像的部分位于不同的行上,它会使创建 keyframes play 动画变得复杂,我仍然需要手动创建(或通过编写大量 gif 文件的脚本)。例如: + + + montage ./*.gif -geometry +0+0 -alpha On -background "rgba(0, 0, 0, 0.0)" -quality 100 out.png = 。如您所见,第一个笑脸被放置在 4 行上。我需要某种棘手的 ImageMagick 的 tile 参数,以便每行都有不同的 gif。 我的 Gif 是 optimized 以使用“组合”模式。这意味着它们的部分可能是不同的大小并且缺少完整图像的部分。 例如: 反汇编为 。 为了解决第 5 步,我可以通过 ImageStick 的转换工具将 gif 转换为带图层的。这是另一个问题:convert -layers dispose input.gif output.gif 产生了一些错误。例如 结果文件缺少一些帧: 下面一行是结果 的精灵版本

总结我的问题

有没有更简单的方法从多个 gif 创建 sprite 文件?解决所有这些问题让我很头疼。必须有一个神奇的工具可以一次性解决所有问题。例如spritegen.website-performance,但它只创建静态图像而不创建动画。 如何从没有步骤 7 (See also) 中描述的错误的 gif 中处理层? 如何使用 ImageMagick 或任何其他工具生成单个 sprite 文件,并且每行(或每列)只有 1 个 gif,如步骤 5 中所述。 有没有一种方法可以将多个 gif 组合成一个 gif,该 gif 还能像精灵一样进行动画处理,然后将图像定位在其背景上?

感谢任何形式的帮助。甚至链接到允许创建单个精灵文件 + 带有动画的 css 的文章或网站也会很棒。提前感谢您的帮助!

最好的问候,

【问题讨论】:

【参考方案1】:

感谢ImageMagick forum我终于找到答案了。

+++

convert -background none \
   \( smilie_yellow.gif -coalesce +append \) \
   \( smilie_green.gif -coalesce +append \) \
   \( smilie_red.gif -coalesce +append \) \
   -append -flatten 3_smilies.png

=

【讨论】:

以上是关于使用 css 信息绘制多个 gif 文件的主要内容,如果未能解决你的问题,请参考以下文章

Java 绘制 GIF

paint() 无法绘制 gif 但 png 可以正常工作?

MATLAB中绘制质点轨迹动图并保存成GIF

尝试使用通过EJS传递给客户端的数据绘制多个Google Map标记/信息窗口时,initMap()不是一个函数

厉害了,用Python绘制动态可视化图表,并保存成gif格式

在 R 中绘制 3D GIF