Измерение несущей волны - PullRequest
7 голосов
/ 14 января 2012

Как я могу получить ширину и высоту текущего экземпляра carrierwave?

Примерно так:

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

К сожалению image.photo_width и image.photo_height не работают. Мне нужно указать ширину и высоту изображений, это требуется для плагина jquery, который я использую.

Ответы [ 4 ]

13 голосов
/ 04 февраля 2012

Объедините https://github.com/jnicklas/carrierwave/wiki/How-to:-Get-version-image-dimensions и https://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 голосов
/ 11 сентября 2012

Вы можете довольно просто сохранить высоту и ширину в качестве атрибутов для вашей модели, если используете Rmagick.В загрузчике 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
1 голос
/ 15 октября 2013

Или просто используйте FastImage . Это значительно облегчает измерение вложений задним числом.

0 голосов
/ 25 сентября 2013

@ Ответ 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
...