Я собираюсь упростить то, что вижу (например, числа, которые я предоставляю, не будут 100%, с точностью до пикселя), но это даст вам один метод для достижения этой цели.
Когда я смотрю на скриншот, то вижу список изображений с соотношением сторон примерно 4х3 (или наоборот 3х4). Это соотношение сторон лежит в основе макета. Общий прямоугольник, который заполняется, может быть любым соотношением сторон, но он должен быть кратным некоторой ширине и высоте. Например, вы увидите, что каждая строка содержит несколько портретных и альбомных фотографий. Общий эффект, однако, заключается в том, что G + может извлекать из большого пула изображений и, следовательно, может выбирать комбинацию изображений, которая отвечает потребностям индивидуального соотношения сторон (ландшафтный или портретный аспект данного изображения), а также общее соотношение сторон вмещающего прямоугольника.
Я бы взял изображения, которые доступны в пуле, и вычислил их соотношение сторон (простая ширина, деленная на высоту). Затем сгруппируйте изображения по соотношению сторон.
Наконец, хитрость в компоновке заключается в том, что вам нужно выяснить, какие комбинации соотношений сторон приведут к полному заполнению строки слева направо. На скриншоте мы видим три таких примера:
- 1-й ряд = 4 пейзажных фото
- 2-й ряд = 2 пейзажных фотографии, 2 портретных фотографии и 1 квадратная фотография
- 3-й ряд = 3 пейзажных фото, 1 портретное фото и 1 квадратное фото
В результате этого, поскольку все миниатюры имеют одинаковую высоту, их объединенные ширины в этих конкретных комбинациях дают желаемую результирующую ширину для прямоугольника макета.
Итак, я думаю, что решение этой конкретной проблемы - это в основном вопрос решения 4 подзадач:
- Вычислить пропорции всех фотографий в доступном "пуле фотографий"
- Составьте список всех комбинаций форматов изображения, которые приводят к желаемой ширине (чтобы сделать один ряд)
- Из имеющихся в наличии фотографий определите, какие фотографии можно объединить в какие допустимые комбинации, в результате чего получается один составной ряд изображений
- Наконец, шаги 1-3 создают одну строку изображений. Чтобы получить общий прямоугольник, вы просто используете шаги 1-3, чтобы создать столько строк изображений, сколько вам нужно, а затем сложить их все друг на друга.