【问题标题】:Retrieving image height with CarrierWave使用 CarrierWave 检索图像高度
【发布时间】:2012-05-30 23:53:37
【问题描述】:

我需要能够放置已处理图像的尺寸。

我在ImageUploader 上课:

version :post do
  process :resize_to_fit => [200, nil]
end

有没有办法让我获得与此类似的图像尺寸?

height = @picture.image_height(:post)

【问题讨论】:

    标签: ruby-on-rails ruby carrierwave


    【解决方案1】:

    您可以调整和使用这里描述的方法:http://code.dblock.org/carrierwave-saving-best-image-geometry

    它添加一个进程,然后调用 Magick 的方法来获取图像几何图形。

    代码:

      version :post do
        process :resize_to_fit => [200, nil]
        process :get_geometry
    
        def geometry
          @geometry
        end
      end
    
      def get_geometry
        if (@file)
          img = ::Magick::Image::read(@file.file).first
          @geometry = [ img.columns, img.rows ]
        end
      end
    

    【讨论】:

    【解决方案2】:

    您可以挂钩 :cache 和 :retrieve_from_cache 方法

    也不需要依赖系统命令:

    # Somewhere in your uploader:
    attr_reader :geometry
    after :cache, :capture_size
    after :retrieve_from_cache, :capture_size
    def capture_size(*args)    
      img = ::MiniMagick::Image::read(File.binread(@file.file))
      @geometry = [img[:width], img[:height]]
    end
    

    http://www.glebm.com/2012/05/carrierwave-image-dimensions.html

    【讨论】:

    • 谢谢!标记为答案的解决方案对我不起作用。不错且简单的解决方案。
    • 请注意,这只会捕获最大版本的大小。您可以使用github.com/gzigzigzeo/carrierwave-meta 来支持多版本(它像其他示例一样添加了流程)。这也可能不是很有效,因为我似乎在这里使用binread,它读取整个文件而不仅仅是标题
    【解决方案3】:

    我在一个帖子上搜索了一些内容:

    源链接http://groups.google.com/group/carrierwave/browse_thread/thread/c5e93b45bde8a85e?fwc=1&pli=1

    class HeaderUploader < CarrierWave::Uploader::Base 
       storage :right_s3 
      def store_dir 
         "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
      end 
      def url 
        ["http://#{s3_bucket}.s3.amazonaws.com/", path].compact.join 
      end 
       before :cache, :capture_size_before_cache 
       before :retrieve_from_cache, :capture_size_after_retrieve_from_cache 
      def capture_size_before_cache(new_file) 
        model.header_width, model.header_height = `identify -format "%wx 
     %h" #{new_file.path}`.split(/x/) 
      end 
      def capture_size_after_retrieve_from_cache(cache_name) 
        model.header_width, model.header_height = `identify -format "%wx 
    %h" #...@file.path}`.split(/x/) 
      end 
      def dimensions 
        "#{model.header_width}x#{model.header_height}" 
      end 
    end 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2015-10-08
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多