【问题标题】:Extract GIF frames retaining base canvas size + offsets提取保留基本画布大小 + 偏移量的 GIF 帧
【发布时间】:2015-06-09 22:00:23
【问题描述】:

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

我需要提取的所有图像与第一帧相匹配,并保留来自 GIF 元数据的偏移量。我不知道如何在 ImageMagik 中实现这一点,想知道这是否可能?

如果我让它们匹配大小并应用偏移量,我可以轻松地将它们添加到精灵表中。

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

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

【问题讨论】:

  • 来张GIF动画怎么样?

标签: image imagemagick extract gif offset


【解决方案1】:

如果你解压成 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

【讨论】:

  • 我想要做的是将它提取到与frame0.gif GIF 307x465 尺寸(307x465)相匹配的画布中,并且每帧应用偏移量。有没有自动化这个算法的命令?因此,精灵表中的所有帧最终都会为 0+0,因为我不想在我的应用程序中手动应用每个偏移量(会做很多工作哈哈)。感谢您的帮助!
  • 当我尝试您提出的第二种方法时,它只会创建一个空白的 canvas.gif 图像,并且所有帧都保持与以前相同的大小。我做错了吗?
  • 也许您希望所有帧都在一个画布上?查看更新的答案。
  • 哇,这太棒了!非常感谢您的帮助!它工作得很好:) 你是一个救生员。甚至提供超出我最初问题的扩展帮助。你是一个绅士和一个学者!
  • 很高兴 - 很高兴能提供帮助!
猜你喜欢
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 2013-11-09
  • 1970-01-01
相关资源
最近更新 更多