如何使用rmagick将动态文本附加到图像?

时间:2012-10-01 21:51:18

标签: ruby-on-rails image imagemagick rmagick

我正在构建一个rails应用程序,用户可以输入六个关于自己的单词并上传图像。我想将这六个字附加到图像上。

我知道如何使用“静态”文本将文本追加到工作中,但我不知道如何将文本字段链接到用户输入六个单词时填写的表单。

现在,'文字'是静态的,无论我放什么。

我想知道为什么以下不起作用?

process :textify => <%= @user.sixwords %> 

这就是我所拥有的:

process :textify => 'Text'

  def textify(phrase)
    manipulate! do |img|
    img = img.sepiatone

  title = Magick::Draw.new

  title.annotate(img, 0,0,0,40, phrase) {
    self.font_family = 'Helvetica'
    self.fill = 'white'
    self.pointsize = 32  
  }

  img = img.write('newimg.gif')
 end
end

感谢您帮助我减少了n00b! :)

1 个答案:

答案 0 :(得分:4)

在朋友的帮助下计算出来。

这就是我需要改变的全部内容:

title.annotate(img, 0,0,0,40, model.name) {
    self.font_family = 'Helvetica'
    self.fill = 'white'
    self.pointsize = 32  
  }

这是有效的,因为Carrierwave使用model作为指向上传器附加到的任何实例对象的变量。在我的模型中,name是用户输入文本的表单字段的名称。

对于其他用例,您只需将model.field_name放在您field_name的任何名称的位置。

我的朋友这样写给我解释一下。我在这里粘贴它,以防它可以帮助别人。

  

ImageUploader中的'process'方法是一个静态类方法   只有在文件加载到内存时才调用一次   由红宝石解释。它基本上只是内部跟踪   应该稍后为每个实例调用哪些处理方法   ImageUploader。 textify方法是获取的实例方法   调用每个创建的ImageUploader对象实例。该   你在运动员模型中调用的'mount_uploader'类方法是   做一些ruby魔术来实例化ImageUploader实例和   将你的运动员实例对象传递给它,让它可用​​于   ImageUploader对象实例作为名为“model”的实例方法。