提取保留基础画布大小+偏移的GIF帧

时间:2015-04-05 08:26:04

标签: image imagemagick extract gif offset

我正在尝试使用ImageMagik convert命令提取GIF帧。 GIF图像经过优化,仅覆盖动画更改(我相信它们称之为mipmap),由于性能限制,这是我提取的理想选择。如果我使用-coalesce我失去了优化,因为我在spritesheet中使用GIF帧,所以我需要按原样提取它,但是当我使用标准convert xxx.gif xxx.png提取它时,动画帧被提取没有偏移,画布大小与基本图像(0)不同。

enter image description here

我需要提取的所有图像与第一帧匹配,并保留GIF元数据的偏移量。我不知道如何在ImageMagik中完成此操作并想知道这是否可行?

然后,如果我将它们与匹配的大小匹配,我可以轻松地将它们添加到精灵表中。

非常感谢我能得到的所有帮助!感谢。

enter image description here

专业挑战!你接受吗?! :)

1 个答案:

答案 0 :(得分:2)

如果你提取到GIF,而不是PNG,它似乎很好:

convert animated.gif frame%d.gif

identify frame*
frame0.gif GIF 307x465 307x465+0+0 8-bit sRGB 256c 61.8KB 0.000u 0:00.000
frame1.gif[1] GIF 278x372 307x465+16+61 8-bit sRGB 256c 19.9KB 0.000u 0:00.000
frame10.gif[2] GIF 278x371 307x465+17+62 8-bit sRGB 256c 17.9KB 0.000u 0:00.000
frame11.gif[3] GIF 278x370 307x465+17+63 8-bit sRGB 256c 17.4KB 0.000u 0:00.000
frame12.gif[4] GIF 275x371 307x465+20+62 8-bit sRGB 256c 17.2KB 0.000u 0:00.000
frame13.gif[5] GIF 276x370 307x465+19+63 8-bit sRGB 256c 17.9KB 0.000u 0:00.000
frame14.gif[6] GIF 275x369 307x465+19+64 8-bit sRGB 256c 16.8KB 0.000u 0:00.000

如果你想将它们叠加到空白画布上,你可以这样做。我没有想太多,可能有一个更简单的方法,但现在......

#!/bin/bash
# Extract individual frames
convert animated.gif frame%d.gif

# Make a blank canvas same size as original
convert -size 307x465 xc:none canvas.gif
i=0
for f in frame*; do
   geom=$(identify -format "%X%Y" $f)
   convert canvas.gif $f -geometry $geom -composite +repage g_$i.gif
   ((i++))
done

或许你的意思是你想要所有的帧都在正确的相对位置但是在一个文件中以一个长序列一个接一个地进行?

#!/bin/bash

# Extract individual frames
convert animated.gif frame%d.gif

# Make a blank canvas same size as original
convert -size 307x465 xc:none canvas.gif

# Paste individual frames onto blank canvas and append frames into long sequence
for f in frame*; do
   geom=$(identify -format "%X%Y" $f)
   convert canvas.gif $f -geometry $geom -composite +repage miff:-
done | convert - +append sequence.gif

enter image description here