Image 提取保留基本画布大小的GIF帧+;抵消

Image 提取保留基本画布大小的GIF帧+;抵消,image,imagemagick,extract,gif,offset,Image,Imagemagick,Extract,Gif,Offset,我正在尝试使用ImageMagikconvert命令提取GIF帧。GIF图像经过优化,仅覆盖动画更改(我相信他们称之为mipmap),由于性能限制,这非常适合我提取。如果我使用-coalesce我会失去优化,因为我在精灵表中使用GIF帧,所以我需要按原样提取它,但当我使用标准convert xxx.GIF xxx.png提取它时,动画帧被提取,没有偏移,画布大小与基础图像不同(0) 我需要提取所有图像,以匹配第一帧与GIF元数据的保留偏移量。我不知道如何在ImageMagik中实现这一点,我想

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

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

然后,如果我让它们与应用的偏移匹配,我可以轻松地将它们添加到精灵表中

我将非常感激能得到的一切帮助!谢谢


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

如果提取为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

发布动画GIF怎么样?我想做的是将其提取到画布中,该画布将
frame0.GIF GIF 307x465
dimensions(307x465)与每帧应用的偏移量相匹配。是否有命令自动执行此算法?因此,对于精灵工作表中的所有帧,它将最终为0+0,因为我不想在我的应用程序中手动应用每个偏移量(这将是一个很大的工作哈哈)。谢谢你的帮助!当我尝试您提出的第二种方法时,它只创建一个空白canvas.gif图像,所有帧的大小与以前相同。我做错什么了吗?也许你想把所有的画面都放在一张画布上?看到更新的答案。哇,这太棒了!非常感谢你的帮助!它工作得很好:)你是个救生员。甚至提供超出我最初问题范围的帮助。你是一位绅士和学者!很高兴能为您提供帮助!