【问题标题】:Get image dimensions using Refile使用 Refile 获取图像尺寸
【发布时间】:2016-02-21 21:00:22
【问题描述】:

使用Refile gem 处理Rails 中的文件上传,在上传期间/之后确定图像高度和宽度的最佳方法是什么?没有对这个 AFAIK 的内置支持,我不知道如何使用 MiniMagick。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 minimagick refile


    【解决方案1】:

    @russellb 的评论几乎让我明白了,但并不完全正确。如果你有一个名为@file 的 Refile::File,你需要:

    fileIO = @file.to_io.to_io
    mm = MiniMagick::Image.open(fileIO)
    mm.width # image width
    mm.height # image height
    

    是的,这是对 #to_io 的两次调用 >...

    -- 更新--

    额外的皱纹:如果文件非常小(

    mm = MiniMagick::Image.read(fileio.read)
    

    所以我的完整代码现在是:

    # usually this is a Tempfile; but if the image is small, it will be 
    # a StringIO instead >:[
    fileio = file.to_io
    
    if fileio.is_a?(StringIO)
      mm = MiniMagick::Image.read(fileio.read)
    else
      file = fileio.to_io
      mm = MiniMagick::Image.open(file)
    end
    

    【讨论】:

    • 非常感谢。没有这个,我会得到“ArgumentError:参数数量错误(1 代表 0)”
    【解决方案2】:

    重新归档附件有一个 to_io 方法(请参阅 Refile::File 文档),它返回一个您可以传递给 MiniMagick 的 IO 对象。

    假设您有一个带有file 附件(id 存储在file_id 字符串列中)和widthheight 列的图像模型,您可以使用以下回调:

    class Image < ActiveRecord::Base
    
      attachment :file
    
      before_save :set_dimensions, if: :file_id_changed?
    
      def set_dimensions
        image = MiniMagick::Image.open(file.to_io)
        self.width = image.width
        self.height = image.height
      end
    
    end
    

    希望对您有所帮助。

    【讨论】:

    • 这几乎对我有用 - 但在某些情况下(仅在生产上,而不是我的开发机器上!)它会生成“ArgumentError:错误数量的参数(1 代表 0)” - 你需要使用.to_io.to_io 根据 Mike V
    【解决方案3】:

    您可以使用 MiniMagick 来执行此操作(但需要使用最新版本)。

    image = MiniMagick::Image.open('my_image.jpg')
    image.height #=> 300
    image.width  #=> 1300
    

    这在 gem 的 README.md 中有很好的记录:https://github.com/minimagick/minimagick

    【讨论】:

    • 是的,我试过了,但问题是从 Refile 中检索文件 - 即用模型中的实际文件替换“my_image.jpg”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2011-04-22
    • 2011-11-19
    • 2018-03-17
    相关资源
    最近更新 更多