【问题标题】:How to: Get version image dimensions carrierwave如何:获取版本图像尺寸carrierwave
【发布时间】:2015-10-24 15:04:13
【问题描述】:

这是我的上传者:

class PostImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper
  storage :fog
  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:

  def store_dir
    "uploads/posts"
  end

  version :medium do
    process :resize_to_limit => [280, nil]
    process :convert => 'jpg'
  end

  def filename
   random_token = Digest::SHA2.hexdigest("#{Time.now.utc}--#{model.id.to_s}").first(20)
   ivar = "@#{mounted_as}_secure_token"    
   token = model.instance_variable_get(ivar)
   token ||= model.instance_variable_set(ivar, random_token)
   "#{model.title.gsub(" ", "-").downcase}-#{token}.jpg" if original_filename
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end

  process :store_dimensions

  private

  def store_dimensions
    if file && model.post_image.medium.present?
     model.image_width, model.image_height = ::MiniMagick::Image.open(file.file)[:dimensions]
    end
  end 

end

在本教程中,https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Get-image-dimensions,可以获得原始图像尺寸。但我想获得版本图像尺寸。像这样的:

def store_dimensions
        if file && model.post_image.medium.present?
         model.image_width, model.image_height = ::MiniMagick::Image.open(model.post_image.medium)[:dimensions]
        end
      end 

而不是file.filemodel.post_image.medium

问题是该代码在之前创建对象时有效。仅在更新图像时有效。

我需要此代码在我第一次创建时可以工作。

问候!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 carrierwave


    【解决方案1】:

    您可以改用callbackshttps://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-use-callbacks

    after :store, :store_dimensions
    
    # rest of uploader codes...    
    
    def store_dimensions(file)
      model.image_width, model.image_height = ::MiniMagick::Image.open(model.post_image.medium)[:dimensions]
      model.save!
    end
    

    【讨论】:

    • 使用中等版本可以正常工作。但是:version :medium do process :resize_to_limit =&gt; [870, nil] process :convert =&gt; 'jpg' end 我从亚马逊得到403 Forbidden。当我尝试调整更大尺寸的大图像时,我遇到了这个问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2013-03-04
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多