【问题标题】:How do i paste an image onto every frame in a gif in ruby with rmagick如何用rmagick将图像粘贴到一个gif中的每个帧上
【发布时间】:2017-04-21 17:01:09
【问题描述】:
require 'rmagick'
require 'open-uri'
include Magick

giflist = Magick::ImageList.new('pewpewpew.gif')
open('avatar.jpg', 'wb') do |file|
  file << open('https://cdn.discordapp.com/avatars/120571255635181568/8e37daf54a9c631afe659ebcb87af959.jpg').read
end

avatar = Magick::Image.read('avatar.jpg').first

newavatar = Draw.new {
  self.fill = 'black'
  self.stroke = 'transparent'
  self.tile = avatar
  self.fill_pattern = avatar
  self.stroke_pattern = avatar
  self.gravity = NorthGravity
}
giflist.each { |image| newavatar.composite(20, 20, 40, 40, image) }# x, y, width, height, image
giflist.write('newgif.gif')

所以基本上我正在尝试将此 jpg 粘贴到 gif 上,但由于某种原因没有发生任何事情,我没有收到任何错误。图片已正确下载,所以我知道这不是问题

gif -> Gif Link

【问题讨论】:

  • 抱歉,我无法阅读 Ruby,但我猜您的 newavatar 可能不包含任何内容,因为您在绘制它时可能没有指定 aa 大小 - 也许尝试自己写出来。跨度>

标签: ruby image imagemagick gif


【解决方案1】:

老实说,我不知道为什么这不是写的错误。我可以告诉你 Ruby 对为什么事情不工作的看法,但是我越是尝试解释这种行为,我就越无法证明这一点。

无论如何,这就是我认为我知道的:

newavatar.composite(20, 20, 40, 40, image)

这是在头像上绘制 gif 。但是你不能只交换变量。 “没有定义cur_image”会爆炸。

giflist.each { |image| newavatar.composite(20, 20, 40, 40, image) }

要么每个帧都被返回到newavatar,要么它们只是被丢弃,因为没有发生分配(image = giflist.each { … })。但同样,无论我尝试哪种方式将其组合在一起,都会出现各种错误。

这是我想出的解决方案:

require 'rmagick'
require 'open-uri'
include Magick

giflist = Magick::ImageList.new('pewpewpew.gif')
open('avatar.jpg', 'wb') do |file|
  file << open('https://cdn.discordapp.com/avatars/120571255635181568/8e37daf54a9c631afe659ebcb87af959.jpg').read
end

avatar = Magick::Image.read('avatar.jpg').first

giflist.each { |image| image.composite!(avatar, NorthWestGravity, 40, 40, OverCompositeOp) }
giflist.write('newgif.gif')

更重要的是,结果:

您会注意到composite! 的使用,它替换了适当的框架(仍在giflist 变量中)。

您要做的最后一部分是将头像的大小减小到 40x40,这应该只有一行,我很确定这就是剩下的了。

简单多了,不是吗?

【讨论】:

  • 工作得很好,感谢您的帮助 :) 我只是被卡住了,因为我遇到了“没有cur_image 错误并且不确定该怎么做。我想我实际上尝试了composite! 但是由于未分配重力,我可能遇到了问题:s
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2020-01-16
  • 1970-01-01
  • 2019-06-26
相关资源
最近更新 更多