CarrierWave - настройка ширины и максимальной высоты изображений

I use CarrierWave and I want to resize the images to a width of 220px and a max-height of 220px. If I use process :resize_to_fit => [220,220] it could be that the width is not 220px. What can I do?

0
добавлено
Просмотры: 2
nl ja de

2 ответы

Если я правильно интерпретирую вопрос:

  • для портретного изображения (скажем, 480px wide, 640px high), вы хотели бы масштабировать его до 220px в ширину, а затем обрезать его до 220px, что приведет к квадратному изображению.

  • для ландшафтного изображения вы хотели бы масштабировать его до 220px в ширину (поэтому высота будет меньше 220px).

Если это так, вам нужен двухэтапный процесс:

  1. Изменить размер до 220 пикселей, сохраняя соотношение сторон
  2. Обрезать до 220px в высоту (если портрет)

Вы можете сделать это, написав собственный процессор с помощью команды manageulate! (см. собственный CarrierWave для некоторого вдохновения).

Я думаю, это примерно то, что вы после

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
3
добавлено
Ах. Затем измените его на "# {width}" или width.to_s .
добавлено автор Andrew Haines, источник
Хорошо, я думаю, это потому, что я забыл вернуть изображение из блока.
добавлено автор Andrew Haines, источник
Он говорит, что не может преобразовать Fixnum в String в строку cmd.resize width .
добавлено автор ijo, источник
Но затем он говорит undefined method 'write' for "": String
добавлено автор ijo, источник

Улучшение ответа Энди Х:

process :resize => [220, 220]

protected

def resize(width, height, gravity = 'Center')
  manipulate! do |img|
    img.combine_options do |cmd|
      cmd.resize "#{width}"
      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
2
добавлено