【发布时间】:2012-05-30 23:53:37
【问题描述】:
我需要能够放置已处理图像的尺寸。
我在ImageUploader 上课:
version :post do
process :resize_to_fit => [200, nil]
end
有没有办法让我获得与此类似的图像尺寸?
height = @picture.image_height(:post)
【问题讨论】:
标签: ruby-on-rails ruby carrierwave
我需要能够放置已处理图像的尺寸。
我在ImageUploader 上课:
version :post do
process :resize_to_fit => [200, nil]
end
有没有办法让我获得与此类似的图像尺寸?
height = @picture.image_height(:post)
【问题讨论】:
标签: ruby-on-rails ruby carrierwave
您可以调整和使用这里描述的方法:http://code.dblock.org/carrierwave-saving-best-image-geometry
它添加一个进程,然后调用 Magick 的方法来获取图像几何图形。
代码:
version :post do
process :resize_to_fit => [200, nil]
process :get_geometry
def geometry
@geometry
end
end
def get_geometry
if (@file)
img = ::Magick::Image::read(@file.file).first
@geometry = [ img.columns, img.rows ]
end
end
【讨论】:
您可以挂钩 :cache 和 :retrieve_from_cache 方法
也不需要依赖系统命令:
# Somewhere in your uploader:
attr_reader :geometry
after :cache, :capture_size
after :retrieve_from_cache, :capture_size
def capture_size(*args)
img = ::MiniMagick::Image::read(File.binread(@file.file))
@geometry = [img[:width], img[:height]]
end
http://www.glebm.com/2012/05/carrierwave-image-dimensions.html
【讨论】:
binread,它读取整个文件而不仅仅是标题
我在一个帖子上搜索了一些内容:
源链接http://groups.google.com/group/carrierwave/browse_thread/thread/c5e93b45bde8a85e?fwc=1&pli=1
class HeaderUploader < CarrierWave::Uploader::Base
storage :right_s3
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def url
["http://#{s3_bucket}.s3.amazonaws.com/", path].compact.join
end
before :cache, :capture_size_before_cache
before :retrieve_from_cache, :capture_size_after_retrieve_from_cache
def capture_size_before_cache(new_file)
model.header_width, model.header_height = `identify -format "%wx
%h" #{new_file.path}`.split(/x/)
end
def capture_size_after_retrieve_from_cache(cache_name)
model.header_width, model.header_height = `identify -format "%wx
%h" #...@file.path}`.split(/x/)
end
def dimensions
"#{model.header_width}x#{model.header_height}"
end
end
【讨论】: