【问题标题】:How to dynamically generate an image overlay/watermark with Paperclip based on model instance attribute path如何使用基于模型实例属性路径的回形针动态生成图像叠加/水印
【发布时间】:2013-10-31 05:49:30
【问题描述】:

关于 SO 有许多类似的问题/答案,但似乎没有一个能解决我的问题。

我的目标是使用 Paperclip 为图像生成“动态水印”(用户头像覆盖在另一张图像上)。我遇到的问题是我无法获取模型的“user_id”属性,以便能够使用动态处理器获取头像文件/url。请注意,我使用的是“watermark.rb”处理器(在互联网的其他地方可以找到)。我可以成功生成静态水印,但 attachment.instance 为零。请看:

class NicerImage < ActiveRecord::Base
   attr_accessible :content, :image, :user_id
   belongs_to :user
   has_attached_file :image,
                     :styles => lambda { |attachment| {
                      :large => {
                          :processors => [:watermark],
                          :geometry => "800>",
                          :watermark_path => User.find(attachment.instance.user_id).avatar.url(:medium),
                          :position => 'SouthEast'
                      }
                     }
                    },
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/aws.yml",
                    :bucket => Rails.configuration.s3[:general_bucket],
                    :convert_options => { :all => "-auto-orient" }
end

我得到的错误是 nil:NilClass 的未定义方法 `user_id='(因为 attachment.instance 为 nil)

谢谢!

【问题讨论】:

    标签: ruby-on-rails paperclip overlay watermark


    【解决方案1】:

    我通过检查是否 avatar_file_name.blank? 解决了我的问题。

    class NicerImage < ActiveRecord::Base
     attr_accessible :content, :image, :user_id
     belongs_to :user
     has_attached_file :image,
                     :styles => lambda { |attachment| {
                      :large => {
                          :processors => [:watermark],
                          :geometry => "800>",
                          :watermark_path => User.find(attachment.instance.user_id).avatar_file_name.blank? ? nil : User.find(attachment.instance.user_id).avatar.url(:medium),
                          :position => 'SouthEast'
                      }
                     }
                    },
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/aws.yml",
                    :bucket => Rails.configuration.s3[:general_bucket],
                    :convert_options => { :all => "-auto-orient" }
    end
    

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 2012-07-07
      相关资源
      最近更新 更多