2016-01-06 15 views
0

我想通過它們的寬度和高度使用特定版本的圖像。所以我跟着How-to:-Get-image-dimensions這個wiki,但得到了undefined method "width="。 我上傳樣子,Minimagick未定義的方法`width ='

class S3uploaderUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 
    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    # include CarrierWave::MiniMagick 
    process :store_dimensions 


    # Choose what kind of storage to use for this uploader: 
    # storage :file 
    storage :fog 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 


    version :detail do 
    process :quality => 90 
    process :store_dimensions 
    end 


    version :mainVertical do 
    process :quality => 80 
    process :store_dimensions 
    process :resize_to_fit => [240, 180] 
    end 

    version :mainHorizontal do 
    process :quality => 80 
    process :store_dimensions 
    process :resize_to_fit => [240, 320] 
    end 

    private 

    def store_dimensions 
    if file && model 
     model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions] 
    end 
    end 
end 

我缺少什麼?有什麼建議麼?謝謝。

回答

1

我從這篇文章得到了一個想法。 conditional-image-resizing-with-carrierwave。它運作良好。

我改變了我的代碼。

class S3uploaderUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 

    storage :fog 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :detail do 
     process :quality => 90 
    end 
    version :main, :if => :image? do 
     process :quality => 90 
     process :resize_to_fit => [240, 180] ,:if => :horizontal? 
     process :resize_to_fit => [240, 320] ,:if => :vertical? 
    end 

    def image?(new_file) 
     self.file.content_type.include? 'image' 
    end 

    def horizontal?(new_file) 
    image = MiniMagick::Image.open(self.file.file) 
    true if image[:height] < image[:width] 
    end 

    def vertical?(new_file) 
    image = MiniMagick::Image.open(self.file.file) 
    true if image[:height] > image[:width] 
    end 
end