Carrierwave:如果大小大于缩放图像(有条件创建的版本)(Carrierwave: Scal

2019-07-31 13:09发布

是可能的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

Answer 1:

我定义的方法,其中,如果图像超过给定的宽度,则它操纵到你的尺寸在这种情况下,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


Answer 2:

我想他们并没有为我工作。 我得到了发展调整到大图像时阻塞服务器。

  • 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的宽度。



Answer 3:

其实@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)