Kin*_*nan 8 ruby ruby-on-rails rmagick carrierwave
如何获得当前载波实例的宽度和高度?
像这样的东西:
car_images.each do | image|
image_tag( image.photo_url, :width => image.photo_width, :height => image.photo_height)
end
Run Code Online (Sandbox Code Playgroud)
不幸的是image.photo_width,image.photo_height并没有工作.我需要指定图像的宽度和高度,这是我正在使用的jquery插件所必需的.
小智 14
结合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
Run Code Online (Sandbox Code Playgroud)
Jam*_*ieD 12
如果使用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
Run Code Online (Sandbox Code Playgroud)
在你的模型中:
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
Run Code Online (Sandbox Code Playgroud)