是可能的carrierwave创建一个版本(例如拇指)仅当图像比的版本的尺寸大??
例:
version :thumb, :if => :is_thumbnable? do
process :resize_to_fit => [32,nil]
end
protected
def is_thumbnable?(file)
image ||= MiniMagick::Image.open(file.path)
if image.nil?
if image['width'] >= 32 || image['height'] >= 32
true
else
false
end
else
false
end
end
我定义的方法,其中,如果图像超过给定的宽度,则它操纵到你的尺寸在这种情况下,32个像素。 把这个代码在你ImageUploader:
version :thumb do
process :resize_to_width => [32, nil]
end
def resize_to_width(width, height)
manipulate! do |img|
if img[:width] >= width
img.resize "#{width}x#{img[:height]}"
end
img = yield(img) if block_given?
img
end
end
我想他们并没有为我工作。 我得到了发展调整到大图像时阻塞服务器。
- carrierwave(0.9.0)
- rmagick(2.13.2)
所以,我得到一看文档: http://carrierwave.rubyforge.org/rdoc/classes/CarrierWave/RMagick.html
有一个精彩功能: resize_to_limit(width, height)
调整图像的大小,以适应指定的尺寸范围内,同时保持原始的宽高比。 只会调整图像大小,如果超过规定的尺寸更大。 所得到的图像可以更短或窄于在较小的尺寸指定,但不会比规定值大。
我的代码如下所示:
version :version_name, from_version: :parent_version_name do
process resize_to_limit: [width, nil]
end
它调整大小以适应只有当它的更大,尊重比W / H的宽度。
其实@Roza解决方案并没有为我工作。 我不得不修改方法如下:
process :resize_to_width => [650, nil]
def resize_to_width(width, height)
manipulate! do |img|
if img.columns >= width
img.resize(width)
end
img = yield(img) if block_given?
img
end
end
我用rmagick(2.13.2)和轨道3.2.13,carrierwave(0.8.0)
文章来源: Carrierwave: Scale image if the size is larger than (conditionally create versions)