Как расчитать пропорции N картинок, чтоб они заняли всю область определенного размера?
Я хочу курлом получить N-ное колтчество изображении сервера, а затем "склеить" их в 1, изменив при этом их размеры, таким образом чтоб получилась таблица, в несколько столбцов и строк.
Пример как сделать вручную: в фотошопе мы можем создать изображение, кинуть туда другие изображения как новые слои, а затем уменьшить их размеры и расположить.
Задача: У нас есть изображение размереом 600х400 пикселей, на котором должны быть расположены 6 изображений. (Вот с этого момента не знаю как провести расчет). Можно разместить по 3 изображения в каждой строке, тогда выходит 600/3 - максимальна ширина картинки и 400/2 максимальная высота.
Как расчитать оптимальное кол-во строк и столбцов картинок?
Огромное спасибо всем за ответы! Столько отличных идей!
Я побыстрому набросал отсюда . Переделал немного под свои нужды, но как вижу не самое оптимальное решение. Думаю, то что вы предложили должно работать лучше, покажу заказчику так, а потом сяду и сделаю красиво :)
Андрей R, Есть такая идея: будем заполнять по k картинок размера a на a вдоль меньшей стороны. Тогда можно утверждать, что мы сможем заполнить k*a вдоль большей стороны. Далее представляем оставшийся прямоугольник как новую исходную задачу, и рекурсивно решаем её. И так влоть до минимального размера стороны квадратного изображения - a[min].
Тогда вся задача сводится к оптимизации двух функций:
N = dN + Summ [i=1..j] (k[i])^2
S = 600*400 - Summ [i=1..j] (a[i]*k[i])^2
a[j] >= a[min]
dN <= 0,
где S - неиспользуемая площадь, N - количество картинок, dN - оставшиеся слоты под картинки, a[i] - сторона квадратной картинки на iом вызове рекурсивной функции, k - количество картинок вдоль меньшей стороны прямоугольника.
Бла-бла-бла, получаем dN -> 0 (а может и нет?) и S -> 0. Как это сделать, мне в голову не пришло.
Например, если у нас 10 картинок, то мы можем разбить их на две итерации: k[1]=3, k[2]=1. Тогда a[1]=133, a[2]=200. Получается квадрат 3*3 изображений 133*133,а оставшаяся полоска заполняется одним изображением 200*200. Получаем dN=0, S=40 000.
строки я так понимаю хотите фиксированной высоты?
не объязательно, например:
- если картинок 2, то строка должна занимать всю высоту, то есть 400рх
- если картинок 8, то думаю логично расположить в 2 строки, тогда строка должна занимать 400/2рх
- если картинок 9, то тоже в 2 строки, но уже 5 в первой и 4 во 2й, так мы выигрываем в высоте каждой картинки, думаю, они будум меньше, если разместить их в 3 строки.
для начала отсортируйте картинки по соотношению сторон
и смасштабируйте для равной высоты
потом посчитайте соотношение сторон если сложить все картинки горизонтально
отношение соотношений сторон сложенных горизонтально картинок и места куда их нужно запихнуть покажет сколько строк вам надо.
после этого имея высоту строк масштабируйте картинки и старайтесь максимально полно заполнить ими строки (в данном случае можно даже перебором комбинаций)