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

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

这可能吗?

是的! 这是我为我的应用程序编写的自定义validation,它应该逐字逐句地在你的工作中,只需将像素设置为你想要的任何颜色。

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,但在这种情况下,这是真的。

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

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

那应该照顾它!