2015-04-05 27 views
0

我試圖使用ImageMagik convert命令提取GIF幀。 GIF圖像經過優化只覆蓋動畫變化(我相信他們稱之爲mipmap),這對於我的提取而言非常理想,因爲性能受到限制。如果我使用-coalesce,我將失去優化,因爲我在Spritesheet中使用GIF幀,所以我需要按原樣提取它,但是當我使用標準convert xxx.gif xxx.png提取它時,動畫幀將被提取而沒有偏移,並且畫布大小不同到基礎圖像(0)。提取GIF幀保留基本畫布大小+偏移量

enter image description here

我需要提取以所述第一幀與來自GIF元數據保留的偏移匹配的所有圖像。我不知道如何在ImageMagik中做到這一點,並想知道這是否可能?

然後,如果我得到他們匹配的大小與偏移量應用我可以輕鬆地將它們添加到精靈表。

希望能得到所有的幫助!謝謝。

enter image description here

臨的挑戰!你接受嗎?! :)

+0

如何張貼GIF動畫? – 2015-04-05 08:51:20

+0

當然,更新... – 2015-04-05 08:56:13

回答

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

+0

我想要做的是提取到一個畫布,匹配'frame0.gif GIF 307x465'尺寸(307x465)與每幀應用的偏移量。有沒有一個命令來自動化這個算法? 因此,它將最終成爲精靈表中所有幀的0 + 0,因爲我不想在我的應用程序中手動應用每個偏移量(會有很多工作哈哈)。謝謝您的幫助! – 2015-04-05 09:02:47

+0

當我嘗試你提出的第二種方法時,它只是創建一個空白的canvas.gif圖像和所有的框架保持與以前一樣的大小。難道我做錯了什麼? – 2015-04-05 09:17:02

+1

也許你想要一個畫布上的所有框架?查看更新的答案。 – 2015-04-05 09:57:10