Если я правильно интерпретирую вопрос:
-
для портретного изображения (скажем, 480px wide, 640px high), вы хотели бы масштабировать его до 220px в ширину, а затем обрезать его до 220px, что приведет к квадратному изображению.
-
для ландшафтного изображения вы хотели бы масштабировать его до 220px в ширину (поэтому высота будет меньше 220px).
Если это так, вам нужен двухэтапный процесс:
- Изменить размер до 220 пикселей, сохраняя соотношение сторон
- Обрезать до 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