2015-04-05 3 views
0

Я пытаюсь извлечь кадры GIF, используя команду ImageMagik convert. Изображения GIF оптимизированы только для оверлейных анимированных изменений (я считаю, что они называются mipmap), и это идеально подходит для моего извлечения из-за ограничений производительности. Если я использую -coalesce, я теряю оптимизацию, так как я использую кадры GIF в spritesheet, поэтому мне нужно извлечь его как есть, но когда я извлекаю его со стандартным convert xxx.gif xxx.png, кадры анимации извлекаются без смещений, а размеры холста различаются к базовому изображению (0).Извлечение GIF кадров, сохраняющих размер холста + смещения

enter image description here

Мне нужно все изображения, извлеченные в соответствии с первым кадром с нераспределенной смещения от GIF мета-данных. Я не знаю, как это сделать в ImageMagik и хочу знать, возможно ли это?

Тогда, если я получаю их соответствующие размеры с применяемыми смещениями, я могу легко добавить их на лист спрайтов.

Поблагодарите всю помощь, которую я могу получить! Благодарю.

enter image description here

Pro вызов! Вы принимаете?! :)

+0

Как насчет размещения анимированный GIF? –

+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

+0

Что я хочу сделать, это извлечь его в холст, который соответствует размерам 'frame0.gif GIF 307x465' (307x465) с смещениями, применяемыми к кадру. Есть ли команда для автоматизации этого алгоритма? Таким образом, это будет 0 + 0 для всех кадров на листе спрайта, поскольку я не хочу вручную применять каждое смещение в своем приложении (будет много работы ха-ха). Спасибо за помощь! –

+0

Когда я попробую второй метод, который вы предложили, он просто создает пустое изображение canvas.gif, и все кадры остаются того же размера, что и раньше. Я делаю что-то неправильно? –

+1

Возможно, вам нужны все кадры на одном холсте? См. Обновленный ответ. –

Смежные вопросы