【问题标题】:Rails - Paperclip - How to Check the Image Dimensions before savingRails - Paperclip - 如何在保存前检查图像尺寸
【发布时间】:2011-03-28 04:06:40
【问题描述】:

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

这可能吗?

【问题讨论】:

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


    【解决方案1】:

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

    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= 将尺寸保存到数据库中,如果您不想存储图像尺寸,可以将其省略。

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

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

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

    那应该解决它!

    【讨论】:

    • 我得到:<:filetask> []>:Rake::FileTask 的未定义方法 `to_file'
    • 噢!因为我的属性是“图像”而不是“文件”
    • 作为更新,to_file 已被弃用并删除。现在正确的方法是使用file.queued_for_write[:original]github.com/thoughtbot/paperclip/issues/812
    • 谢谢@CalvinL,您介意看一下并确认我正确更改了答案吗?我不再使用回形针,所以我没有遇到过这个问题。
    • 当某人处于“编辑”状态而不是“新”状态时,您如何处理。如何仅在创建新记录时检查 file_dimensions?
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多