我有两个动图:aura.gif
是一个7帧的动画,character.gif
是一个1帧的图像。当我把一个叠加在另一个上面时,我得到了一个7帧的动画图像,但是character.gif
中的角色只出现在第一帧。
我怎样才能将角色复制7次,这样当我将它覆盖在光环上时,角色会在所有7帧中显示出来?
我无法从一开始就制作character.gif
动画。
require 'vips'
character = File.open("character_no_animation.gif").read
character_b = Vips::Image.new_from_buffer(character, "", access: 'sequential', n: -1)
aura = File.open("aura.gif").read
aura_b = Vips::Image.new_from_buffer(aura, "", access: 'sequential', n: -1)
aura_b.composite(character_b, "over", x: 0, y: 0).gifsave("composite.gif")
2条答案
按热度按时间rqmkfv5c1#
交叉发布于此:
https://github.com/libvips/ruby-vips/discussions/353
这表明:
这应该会更快,因为它只是一个复合操作,而不是7个在彼此之上。
cbjzeqam2#
我意识到Vips中的动画图像是作为
height * num_frames
中的图像加载的,所以我最终得到了以下代码,它可以完成我所需要的任务: