Здесь в любом случае понадобится бекенд.
Как пример, можно определять ориентацию изображения и дальше от класса .horizontal или .vertical позиционировать через css (absolute, width/height: 100% - в зависимости от класса, left/top: 50% - в зависимости от класса, transform: translateX(-50%)/translateY(-50%) - тоже в зависимости от класса).
В таком случае оригинальные размеры изображения сохраняются (пользователь может его сохранить таким же).
Ну либо бекендом делать обычный crop.