Redimensione a imagem para preencher ou caber dependendo da orientação com CarrierWave e RMagick

Se você tiver um controle deslizante, talvez queira definir resize_to_fitquando a orientação da imagem é paisagem e resize_to_fillquando é retrato. Isso é o que o Airbnb faz pelo controle deslizante de fotos.

Para fazer isso, use isso em seu CarrierWave Uploader (funciona com RMagick, pode ser adaptado para MiniMagick)

version :slider do
process
:create_slider_version
end

def create_slider_version
img
= Magick::Image.read(current_path)
width
= img[0].columns
height
= img[0].rows
if width > height
# original is landscape
resize_to_fill
(738, 492)
else
# original is portrait
resize_to_fit
(738, 492)
end
end

O contexto do create_slider_versionmétodo é CarrierWave :: Uploader :: Base (de onde current_pathvem o método ).