CarrierWave - 设置图像的宽度和最大高度

时间:2013-01-09 13:11:24

标签: ruby-on-rails carrierwave minimagick

我使用CarrierWave,我希望将图像的大小调整为220px,最大高度为220px。 如果我使用process :resize_to_fit => [220,220],则宽度可能不是220px。我该怎么办?

2 个答案:

答案 0 :(得分:3)

如果我正确地解释了这个问题:

  • 对于肖像图像(比如480像素宽,640像素高),您可能需要将其缩小到220像素宽,然后将其裁剪为220像素高,从而产生方形图像。

  • 对于横向图像,您可能希望将其缩小到220px宽(因此高度将小于220px)。

如果这是正确的,您需要一个两步的过程:

  1. 调整宽度为220像素,保留宽高比
  2. 裁剪至220px高(如果是肖像)
  3. 您可以使用manipulate!命令编写自己的处理器(请参阅CarrierWave's own获取一些灵感)。

    我认为这大致是你所追求的

    process :resize => [220, 220]
    
    protected
    
    def resize(width, height, gravity = 'Center')
      manipulate! do |img|
        img.combine_options do |cmd|
          cmd.resize width.to_s
          if img[:width] < img[:height]
            cmd.gravity gravity
            cmd.background "rgba(255,255,255,0.0)"
            cmd.extent "#{width}x#{height}"
          end
        end
        img = yield(img) if block_given?
        img
      end
    end
    

答案 1 :(得分:2)

Andy H答案的改进: