Я внес некоторые изменения в решение Дрю, чтобы лучше соответствовать моим потребностям.
function calculateCover(frame, sides) {
var ratio = sides[1] / sides[0],
cover = {
width: frame.width,
height: Math.ceil(frame.width * ratio)
};
if (cover.height <= frame.height) {
cover.height = frame.height;
cover.width = Math.ceil(frame.height / ratio);
}
return cover;
}
calculateCover({width: 1280, height: 822}, [16,9]);
Идея та же, но смысл здесь в том, чтобы рассчитать увеличенный размер без начального размера носителя, вместо этого используя заданное соотношение сторон.Я использую его для встраивания видео, а не изображений, где я загружаю видео, например, через API YouTube, и у меня нет первоначального размера, но я знаю соотношение и хочу растянуть видео на доступное пространство.(Конечно, его можно изменить обратно, чтобы рассчитать соотношение из фактических размеров видео или изображения.) Также сделаны некоторые упрощения кода.