3

仅当图像大于版本的大小时,才可以使用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
4

3 回答 3

8

我尝试了它们,但它对我不起作用。在开发中调整为大图像时,我的服务器被阻止。

  • 载波 (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 的比率。

于 2013-12-30T14:39:59.990 回答
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
于 2012-09-12T17:06:47.870 回答
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)

于 2013-06-07T13:39:47.363 回答