1

这是我在这里的第一篇文章,我会尽量在我的解释中做到简明扼要。ImageMagick:带透明背景的GIF动画

我正在尝试为我的网站创建一个非常简单的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确实没什么关于透明背景...

我会很感激,如果有人可以给我个忙。因为我对这个软件的使用非常没有经验,我想用透明背景的软转换来获得动画。

非常感谢提前。

问候

回答

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 

提示通过-morph生成的2

您最初的图像看起来是错误的。你可以看到他们并排侧,使用+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 ... 
+0

非常感谢@马克的非常有价值的帮助!你提供的脚本帮了我很多!但是,创建动画后得到的最终结果仍然有一个不好的行为[这里](https://www.dropbox.com/s/e2y0viuuor5y4y3/logo-magic.gif?dl=0),你可以看到我是什么谈论!我认为这是与透明度... 要创建我添加下面一行到你的脚本的末尾动画'转换-delay 10 -dispose以前帧 - * PNG徽标magic.gif'但仍有些东西可能会因为最终结果不是我正在寻找的那个而丢失...... – zfaraday

+0

但是,正如我所说,您的脚本对我来说真的很有用,因为我用它来获得另一个动画。我重新编写脚本以获得[此脚本]的旋转动画,并[在此](https://www.dropbox.com/s /6pl75c17yvjojp5/logo-rotated.gif?dl=0)你可以看到结果。正如你所看到的,在这种情况下,动画是成功创建的,没有任何问题处理透明度。如果过程相同,为什么我无法在第一个动画中获得正确的结果? – zfaraday