Rails - Paperclip - 如何在保存之前检查图像尺寸

时间:2011-03-28 04:06:40

标签: ruby-on-rails ruby-on-rails-3 paperclip

我有一个带回形针的Rails 3应用程序。 我想通过回形针保存宽度/高度为LTE 50x50的图像。

这可能吗?

1 个答案:

答案 0 :(得分:36)

是的!这是我为我的应用程序编写的自定义验证,它应该逐字逐句,只需将像素设置为您想要的任何值。

def file_dimensions
  dimensions = Paperclip::Geometry.from_file(file.queued_for_write[:original].path)
  self.width = dimensions.width
  self.height = dimensions.height
  if dimensions.width < 50 && dimensions.height < 50
    errors.add(:file,'Width or height must be at least 50px')
  end
end

有一点需要注意,我使用self.width=self.height=来将维度保存到数据库中,如果您不关心存储图像尺寸,可以将其保留。

检查宽度和高度意味着只有一个必须大于50px。如果你想确保BOTH超过50,具有讽刺意味的是,需要检查宽度或高度。对我来说,似乎很奇怪,其中一个或另一个意味着AND检查,两者都意味着OR,但在这种情况下,这是真的。

唯一的其他 gotcha 是,您需要最后运行此验证:如果模型上已经存在其他错误,则会引发异常。说实话,它已经有一段时间了,所以我不记得错误信息是什么,但在你的验证宏中使用它:

validate :file_dimensions, :unless => "errors.any?"

应该照顾它!