ImageMagick:透明背景的GIF动画

时间:2016-01-22 19:19:14

标签: animation imagemagick transparency animated-gif imagemagick-convert

这是我在这里的第一篇文章,我将在解释中尽量简明扼要。

我正在尝试为我的网站创建一个非常简单的GIF动画,自从我昨天开始使用ImageMagick以来,我在这个世界上是全新的,我遇到了严重的问题,无法获得我想要的结果。动画只包含2个无限交换的帧。在这里,您可以看到basic animation

正如您所看到的,动画由几个字符组成,这些字符在透明背景上逐帧更改。到目前为止没问题。问题是我希望从一帧到另一帧的转换为尽可能平滑 ,而不仅仅是一个基本的开关。我找到了在文档中定义这种转换的方法。但是,此命令无法创建我需要的动画,因为背景透明度,因为它会在过渡期间破坏透明度并且会让它变得很乱!如果我改变背景颜色,比方说,黑色一切都按预期工作......在这里你可以找到transparent background上的动画。

这些是我使用的命令:

convert logo_1.png logo_3.png -morph 15 -set delay 10   \( -clone 0 -set delay 240 \) -swap 0 +delete \
      \( +clone   -set delay 240 \) +swap   +delete \
      -duplicate 1,-2-1  logo_anim_9.gif
convert -alpha Set logo_1.png logo_3.png -morph 15 -set delay 10   \( -clone 0 -set delay 240 \) -swap 0 +delete \
      \( +clone   -set delay 240 \) +swap   +delete \
      -duplicate 1,-2-1  logo_anim_11.gif

然而,-alpha Set没有关于透明背景...

如果有人可以帮我解决这个问题,我将非常感激,因为我对使用这个软件非常缺乏经验,我希望通过透明背景的软转换来获得动画。

非常感谢提前。

祝你好运

1 个答案:

答案 0 :(得分:0)

上床睡觉了,我还没有破解它,但是以下内容可能会帮助你解决这个问题。

提示1

此命令可用于调试动画:

identify -format "Scene:%s Time:%T Geom:%g Dispose:%D\n" log*9*

Scene:0 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:1 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:2 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:3 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:4 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:5 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:6 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:7 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:8 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:9 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:10 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:11 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:12 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:13 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:14 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:15 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:16 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:17 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:18 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:19 Time:40 Geom:300x240+0+0 Dispose:Previous
Scene:20 Time:40 Geom:300x240+0+0 Dispose:Previous

提示2

-morph生成的初始图片看起来不对。您可以使用+append这样并排查看它们:

convert logo_1.png logo_3.png -morph 15 +append result.png

enter image description here

我尝试用这个手动生成它们:

#!/bin/bash -xv
rm frame-*png
f=0
for p in $(seq 0 5 100); do
   echo Percentage: $p
   name=$(printf "frame-%02d.png" $f)
   convert logo_1.png logo_3.png -compose blend -define compose:args=$p -composite $name
   ((f++))
done
convert frame-*png +append result.png

enter image description here

他们就在这条线之上,但是你无法看到它们: - )

提示3

尝试使用-dispose进行试验。您可以通过以下方式查看可用选项:

identify -list dispose

Undefined
Background
None
Previous
0
1
2
3

所以,试试:

convert -dispose previous ...