2012-01-13 16 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プラグインで必要です。

答えて

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を組み合わせて、あなたが得る:

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 
11

Rmagickを使用している場合は、非常に簡単にあなたのモデルと属性として、高さと幅を保存することができます。

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 

そして、あなたのモデルに:Carrierwaveアップローダーで

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 
+2

これは新しいアップロード( 'image_changed?== true')では機能しますが、既存の添付ファイルのサイズを測定するのはどうですか?私はコンソールから 'get_geometry'メソッドにアクセスできないようです。私は、 "' "というプライベートメソッドファイルを取得しています。" –

0

JamieDの答えは1つの例外を除いて、私のために働きました@。私は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を更新しました。 –

1

それともFastImageを使用しています。これにより、添付ファイルを遡及的に測定する方がはるかに簡単になります。