2012-01-13 294 views
7

如何獲取carrierwave當前實例的寬度和高度?Carrierwave圖像尺寸

事情是這樣的:

car_images.each do | image| 
    image_tag(image.photo_url, :width => image.photo_width, :height => image.photo_height) 
end 

不幸的是image.photo_widthimage.photo_height不工作。 我需要指定圖像的寬度和高度,它是我使用的jquery插件所必需的。如果使用Rmagick

class Image 
    before_save :update_image_attributes 

    private 

    def update_image_attributes 
    if image.present? 
     self.content_type = image.file.content_type 
     self.file_size = image.file.size 
     self.width, self.height = `identify -format "%wx%h" #{image.file.path}`.split(/x/) 
     # if you also need to store the original filename: 
     # self.original_filename = image.file.filename 
    end 
    end 
end 

回答

13

結合https://github.com/jnicklas/carrierwave/wiki/How-to:-Get-version-image-dimensionshttps://github.com/jnicklas/carrierwave/wiki/How-to:-Store-the-uploaded-file-size-and-content-type,你會得到。在Carrierwave上傳:

class ArtworkUploader < CarrierWave::Uploader::Base 

    def geometry 
    @geometry ||= get_geometry 
    end 

    def get_geometry 
    if @file 
     img = ::Magick::Image::read(@file.file).first 
     geometry = { width: img.columns, height: img.rows } 
    end 
    end 

end 

而在你的模型:

class Artwork < ActiveRecord::Base 

    mount_uploader :image, ArtworkUploader 

    before_save :save_image_dimensions 

    private 

    def save_image_dimensions 
     if image_changed? 
     self.image_width = image.geometry[:width] 
     self.image_height = image.geometry[:height] 
     end 
    end 
end 
11

您可以保存的高度和寬度屬性與您的模型很容易:

+2

這適用於新上傳('image_changed?== true'),但測量現有附件的尺寸又如何?我似乎無法從控制檯訪問'get_geometry'方法。我得到了''私人方法'文件',稱爲''「。 – 2013-10-11 22:36:25

0

@ JamieD的回答爲我工作,但有一個例外。我正在使用MiniMagick。

所以我給我的上傳者添加了這樣的內容。

def geometry 
    @geometry ||= get_geometry 
end 

def get_geometry 
    if @file 
    img = ::Magick::Image::read(@file.file).first 
    geometry = { width: img.columns, height: img.rows } 
    end 
end 
+0

我已經使用MiniMagick信息更新了https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Get-image-dimensions。 – 2014-07-29 18:31:14

1

或者只是使用FastImage。這使得追溯測量附件變得更容易。