只有当图像大于版本的大小时,才能使用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
答案 0 :(得分:7)
我尝试了它们并不适合我。 在调整开发中的大图像时,我将服务器阻止。
所以我看一下文档: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的比率相符。
答案 1 :(得分:4)
我定义了一种方法,如果图像超过给定宽度,则在这种情况下将其操作为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
答案 2 :(得分:0)
实际上@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)和rails 3.2.13,carrierwave(0.8.0)