首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageMagick将动画gif的背景更改为透明,但帧重叠。怎么解决?

使用ImageMagick将动画gif的背景更改为透明,但帧重叠。怎么解决?
EN

Stack Overflow用户
提问于 2014-04-24 16:53:08
回答 2查看 2.1K关注 0票数 4

我希望将gif背景更改为透明的,并使用ImageMagick的以下命令:

转换input.gif -transparent白色output.gif

然而,输出有重影效应,后期帧与以前的帧重叠。

//对不起,我没有资格贴我自己的照片。这里有一个例子:http://tieba.baidu.com/p/1090763568

怎样才能使它们不重叠呢?或者说,没有幽灵效应?

EN

回答 2

Stack Overflow用户

发布于 2015-05-04 09:04:10

我认为“答案”是,这是一个糟糕的动画制作为您的目的。您可以看到,该动画由12帧组成,ImageMagick如下所示:

代码语言:javascript
复制
identify anim.gif

anim.gif[0] GIF 400x350 400x350+0+0 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[1] GIF 1x1 400x350+0+0 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[2] GIF 226x152 400x350+85+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[3] GIF 218x152 400x350+89+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[4] GIF 210x152 400x350+93+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[5] GIF 202x152 400x350+97+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[6] GIF 194x152 400x350+101+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[7] GIF 194x152 400x350+101+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[8] GIF 202x152 400x350+97+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[9] GIF 210x152 400x350+93+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[10] GIF 218x152 400x350+89+8 8-bit sRGB 256c 106KB 0.000u 0:00.000
anim.gif[11] GIF 226x152 400x350+85+8 8-bit sRGB 256c 106KB 0.000u 0:00.000

您可以将图像分割成其组成帧,并使白色区域透明如下:

代码语言:javascript
复制
convert anim.gif -transparent none frame-%02d.gif

-rw-r--r--   1 mark  staff      9777  4 May 11:11 frame-11.gif
-rw-r--r--   1 mark  staff      9732  4 May 11:11 frame-10.gif
-rw-r--r--   1 mark  staff      9681  4 May 11:11 frame-09.gif
-rw-r--r--   1 mark  staff      9835  4 May 11:11 frame-08.gif
-rw-r--r--   1 mark  staff      9533  4 May 11:11 frame-07.gif
-rw-r--r--   1 mark  staff      9479  4 May 11:11 frame-06.gif
-rw-r--r--   1 mark  staff      9986  4 May 11:11 frame-05.gif
-rw-r--r--   1 mark  staff      9907  4 May 11:11 frame-04.gif
-rw-r--r--   1 mark  staff     10070  4 May 11:11 frame-03.gif
-rw-r--r--@  1 mark  staff     10099  4 May 11:11 frame-02.gif
-rw-r--r--   1 mark  staff        43  4 May 11:11 frame-01.gif
-rw-r--r--@  1 mark  staff     15917  4 May 11:11 frame-00.gif

你也可以像这样蒙太奇所有的帧:

代码语言:javascript
复制
convert anim.gif -transparent white miff:- | montage -tile 3x -frame 5 - montage.jpg

如果您试图将框架与background的处理方法放在一起,您将丢失只出现在第一个帧中的单词welcome

代码语言:javascript
复制
convert -dispose background frame-0* a.gif

如果您尝试在动画前将第一帧(因此您有“欢迎”)与其他帧合成,您将得到一个黑,因为男孩和女孩的角色也出现在第一帧中:

代码语言:javascript
复制
convert frame-00.gif frame-02.gif -geometry +85+8 -composite x.gif

我看到的唯一解决方案是把第一个画面放到Photoshop中,移除男孩和女孩,然后重建动画……但话又说回来,我不是动画专家,现在所有的帧都“在桌面上”,其他人可能会告诉你一个更简单的方法。

票数 2
EN

Stack Overflow用户

发布于 2015-05-04 05:59:48

如果使用Gimp编辑它,有一个选项可以更改处理方法以替换(“未指定的帧处理:每层一个帧(替换)”,以便在完全清除前一个帧后呈现每个帧)。

但是,如果您不想一次一个地编辑每个文件,使用另一个程序,我已经为我创建了一个ruby脚本来修复这个问题(如果您需要的话,可以批量修复)。我发现的唯一方法是对ImageMagick使用的处理方法进行二进制替换,使之与Gimp使用的方法的值相同(“替换”,9:据我所知,这是唯一在具有透明背景的动画gifs上工作的方法)。注意:要运行脚本,您必须安装ruby (如果没有)并编辑您想要处理的文件名。

Ruby脚本将gif的处理方法更改为“替换”

脚本的描述(描述问题和示例动画、重叠(buggy)和替换(工作))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23275123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档