Animation ImageMagick:GIF透明背景动画

Animation ImageMagick:GIF透明背景动画,animation,imagemagick,transparency,animated-gif,imagemagick-convert,Animation,Imagemagick,Transparency,Animated Gif,Imagemagick Convert,这是我在这里的第一篇帖子,我会尽量简洁准确地解释 我正在尝试为我的网站创建一个非常简单的GIF动画,自从我昨天开始玩ImageMagick以来,我在这个世界上是一个全新的人,为了得到我想要的结果,我遇到了严重的问题。动画仅包含两个无限交换的帧。在这里你可以看到 如您所见,动画由一对角色组成,这些角色在透明背景上随帧变化。到目前为止没有问题。问题是我希望从一个帧到另一个帧的转换尽可能平滑,而不仅仅是一个基本的切换。我在文档中找到了定义这种转换的方法。但是,此命令无法创建我需要的动画,因为会在转换过

这是我在这里的第一篇帖子,我会尽量简洁准确地解释

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

如您所见,动画由一对角色组成,这些角色在透明背景上随帧变化。到目前为止没有问题。问题是我希望从一个帧到另一个帧的转换尽可能平滑,而不仅仅是一个基本的切换。我在文档中找到了定义这种转换的方法。但是,此命令无法创建我需要的动画,因为会在转换过程中破坏透明度,并且会把它弄得一团糟!如果我把背景颜色改成,比如说,黑色,一切都能正常工作。。。在这里,您可以在屏幕上找到动画

以下是我使用的命令:

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集
对透明背景没有任何影响

如果有人能帮我一把,我将非常感激,因为我对使用这个软件非常缺乏经验,我希望得到带有透明背景的软过渡动画

非常感谢


致以最诚挚的问候

我得去睡觉了,我还没有解决它,不过下面的内容可能会帮助你解决它

提示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

我尝试使用以下方法手动生成它们:

#!/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

它们就在这条线上,但你看不见它们:-)

提示3

尝试试用
-dispose
。您可以通过以下选项查看可用选项:

identify -list dispose

Undefined
Background
None
Previous
0
1
2
3
因此,请尝试:

convert -dispose previous ...

我要去睡觉了,我还没有解决它,但是下面的内容可能会帮助你解决它

提示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

我尝试使用以下方法手动生成它们:

#!/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

它们就在这条线上,但你看不见它们:-)

提示3

尝试试用
-dispose
。您可以通过以下选项查看可用选项:

identify -list dispose

Undefined
Background
None
Previous
0
1
2
3
因此,请尝试:

convert -dispose previous ...

非常感谢@Mark为您提供的宝贵帮助!你提供的剧本对我帮助很大!但是,我在创建动画后得到的最终结果仍然有一个不好的行为,你可以看到我在说什么!我认为这与透明度有关。。。为了创建动画,我在脚本的末尾添加了以下行
convert-delay 10-dispose previous frame-*png logo magic.gif
,但是仍然缺少一些内容,因为最终的结果不是我想要的结果……但是,正如我所说,你的脚本对我真的很有用,因为我用它来制作另一个动画。我重新调整了脚本以获得旋转动画,您可以看到结果。如您所见,在本例中,动画创建成功,在处理透明度方面没有任何问题。如果过程相同,为什么我不能在第一个动画中获得正确的结果?非常感谢@Mark提供的非常宝贵的帮助!你提供的剧本对我帮助很大!但是,我在创建动画后得到的最终结果仍然有一个不好的行为,你可以看到我在说什么!我认为这与透明度有关。。。为了创建动画,我在脚本的末尾添加了以下行
convert-delay 10-dispose previous frame-*png logo magic.gif
,但是仍然缺少一些内容,因为最终的结果不是我想要的结果……但是,正如我所说,你的脚本对我真的很有用,因为我用它来制作另一个动画。我重新调整了脚本以获得旋转动画,您可以看到结果。如您所见,在本例中,动画创建成功,在处理透明度方面没有任何问题。如果过程相同,为什么第一个动画不能得到正确的结果?