как сделать сетку предпросмотра изображений / Хабр

Всем привет. Меня зовут Марат Исаев, я фронтенд-разработчик ВКонтакте, разрабатываю решения для VK Мессенджера. В этом посте я хочу рассказать о том, как сделать сетку предпросмотра фотографий (сейчас этот вариант доступен в фастчатах ВКонтакте, но уже в ближайшее время он появится в VK Мессенджере веб-версии). На практике всё не так просто, как может показаться на первый взгляд – изображения бывают разной ориентации и с разным соотношением сторон. Иногда хочется сделать акцент на каких-то изображениях из набора, но при этом показать и другие.

Популярный подход

Пожалуй, чаще всего сетку предпросмотра делают так: описывают несколько алгоритмов, которые будут применены к альбому в зависимости от количества фотографий, соотношения их сторон и ещё каких-то специфичных для проекта параметров. Например: «Если в альбоме три фотографии и большинство из них портретной ориентации, то применить Strategy3Portrait; если фотографий от 5 до 10, то применить Strategy5_10». При этом важно сохранить порядок следования фотографий.

Давайте по-другому

Я предлагаю рассмотреть другой способ решения этой задачи. Сначала откажемся от привязки к конкретному количеству фотографий и их пространственной ориентации. Сформулируем задачу так: «Разместить N фотографий со сторонами xnyn в прямоугольнике со сторонами ab, сохранив их очерёдность».

Затем выровняем все фотографии по высоте h и начнём их «выкладывать» как кирпичи.

Если фотография не помещается в текущий ряд, то перенесём её в новый и продолжим «выкладывать».

Закончив «кладку», изменим масштаб каждого ряда таким образом, чтобы заполнить «пробелы».

Теперь проверим «кладку», чтобы ни одна картинка не оказалась слишком маленькой (минимальные размеры hmin и wmin). Если мы близки к соотношению сторон прямоугольника a*b и проверка на критические размеры пройдена, то получившуюся сетку можно считать подходящей.

Очевидно, что чем удачнее мы выберем h в диапазоне от hmin до b, тем быстрее мы получим желаемый результат. К примеру, можно подбирать h бинарным поиском. Или можно поступить ещё проще: сделать несколько «кладок» с шагом дельта от hmin до b, а затем выбрать вариант, у которого соотношение сторон ближе всего к a/b.

Сложность алгоритма

Узкое место этого алгоритма — тот самый поиск оптимального h. Если мы будем идти с шагом дельта, то сложность будет линейная, потому что количество шагов — константа. И если будем искать бинарным поиском, то сложность тоже будет линейной, константой будет диапазон b − hmin, а следовательно и log2(b − hmin).

Из мира идеального в мир реальный

Можно ли «разместить N фотографий со сторонами xnyn в прямоугольнике с размерами ab, сохранив их очерёдность»? Да. Можно ли «разместить N фотографий со сторонами xnyn в прямоугольнике с размерами ab, сохранив их очерёдность и выдержав критические размеры и оригинальные соотношения сторон»? Не всегда. Это будет зависеть от N, от соотношения сторон фотографий и от a и b. Во ВКонтакте количество изображений в предпросмотре ограничено 10. Если фотография одна, то сетка и не нужна. Значит, нам нужно как-то гарантировать хороший результат для 2—10 изображений.

Мы имеем дело с комбинаторикой. Нужно просчитать все возможные варианты и проанализировать результат. Причём для решения задачи нам нужно воспользоваться «размещением с повторениями» Ank = nk . В нашем случае n — это количество всех возможных соотношений сторон отдельных фотографий, а k — общее количество фотографий (от 2 до 10). Отсюда вывод: чтобы количество размещений было конечным, нам важно: чтобы и количество возможных соотношений сторон было конечным. Например, выберем пять соотношений: 9/16, 3/4, 1/1, 4/3 и 16/9. Тогда количество размещений рассчитывается как 5k , где k = 2, …, 10. То есть, если у нас есть в альбоме пять фотографий с пятью возможными соотношениями, то количество всех возможных вариантов их размещения равно 3125.

Описывать стратегии для всех частных случаев нет смысла, их слишком много. А если ограничиться лишь квадратами, то мы легко можем описать десять стратегий (напомню, что количество размещений в таком случае будет 1k, k = 1, …, 10). Но ведь мы хотим сделать сетку предпросмотра по возможности разнообразной, поэтому давайте подумаем, как ещё можно улучшить алгоритм.

Объять необъятное. Как просмотреть и оценить все «сетки»

Обозначив диапазон соотношений сторон, мы можем отказаться и от проверки на критические размеры hmin и wmin для каждой отдельной фотографии, так как они станут взаимосвязаны (нам достаточно знать лишь, что выбранный h ≥ hmin и h ≤ b). Скрипт для набора пула возможных размещений вы можете взять здесь.

Теперь прогоним пул через наш алгоритм и проанализируем разброс отклонений соотношений сторон получившихся сеток от эталонной a/b. Если отклонения невелики, то фиксируем hmin, a, b и значения соотношений сторон фотографий. А если отклонения велики, то корректируем их. Возможно, стоит сократить количество соотношений или изменить размеры a и b. Зачастую общую картину портит последнее изображение, которое остаётся одно в последнем ряду. В таких случаях можно принудительно объединять два последних ряда.

Допустим, нам нужно скомпоновать фотографии в сетку с соотношением сторон 4/3. Примем ширину «окна» в 360 пикселей и укажем, что минимальная высота каждой отдельной фотографии должна быть не менее 80 пикселей. Не буду приводить все диаграммы, для понимания общей картины нам достаточно посмотреть на распределение всех получившихся «сеток» по диапазонам соотношений сторон для 2, 5 и 10 фотографий.

Разброс пропорций «сетки» для 2 фотографий

Разброс пропорций «сетки» для 5 фотографий

Разброс пропорций «сетки» для 10 фотографий

Чем больше фотографий, тем больше и пространство для манёвра. Например, если рядов больше двух и последний ряд содержит единственное изображение (то о чём мы говорили выше), мы можем применить принудительное объединение последних рядов.

Разброс пропорций «сетки» для 2 фотографий

Разброс пропорций «сетки» для 5 фотографий

Разброс пропорций «сетки» для 10 фотографий

Как видите, чем больше вариантов нам доступно, тем лучше сетка поддаётся постобработке. Потом можно, например, отсекать слишком высокие «сетки» отдавая предпочтение тем, что шире. Или наоборот, если вы формируете сетки под экраны смартфонов. Таких эвристик можно придумать много.

Если же фотографий значительно больше 10 (или любого другого числа, для которого вам нужно гарантировать результат), то выбор наилучшего соотношения можно просто опустить, равно как и подбор h, указав его равным hmin.

Мы придём к гарантированному результату для любого количества фотографий за время O(n).

P.S.: Если у вас есть свой «рецепт» для сетки предпросмотра, делитесь в комментариях.

Для вк Фото #66482 | Делаем красивые картинки для ВК | Размер картинки для поста ВК!

Для вк Фото #66482 | Делаем красивые картинки для ВК | Размер картинки для поста ВК! — YouTube скачать

1. Выберите размер

Оригинал Ваш размер экрана ()

2. Выберите формат

JPG PNG WEBP

3. Нажмите на кнопку

Поделиться

Снизу вы можете скопировать ссылку на изображение

При использовании изобраежния ссылка на источник обязательна.

Скопированно!

Апрель 12, 2023

1280×720 px.

9

Готовые картинки постов ВКонтакте бесплатно | Canva

12

Создать мем \

8

Как оформить обложку для ВК сообщества: подробный гайд | EPICSTARS

4

Классные картинки для вк (56 фото) — 56 фото

3

Красивые картинки для вк на аву (54 фото) — 54 фото

3

Крутые картинки для вк (59 фото) — 59 фото

14

Крутые картинки для вк (59 фото) — 59 фото

13

Бежевые сюжеты вк | Обложка сюжетов вк | Актуальное в вк | Актуальное обложки вк — Бежевая эстетика | Дизайн, Дизайн для фирменного стиля, Обложка

3

Красивые картинки для вк на аву (54 фото) — 54 фото

6

Красивые картинки для вк на аву (54 фото) — 54 фото

4

Голубые сюжеты вк | Обложка сюжетов вк | Актуальное в вк | Актуальное обложки вк — Голубая эстетика | Дизайн для фирменного стиля, Обложка, Дизайн

3

Как создать оформление группы ВКонтакте в 2022 | 142 шаблона Canva

5

Как оформить обложку для ВК сообщества: подробный гайд | EPICSTARS

3

Оформление группы в ВК — примеры, правила, советы, полезные сервисы

7

Создайте картинку для поста ВКонтакте онлайн бесплатно с помощью конструктора Canva

3

Размеры картинок для соцсетей: памятка маркетологу для создания красивых постов — Блог SendPulse

5

ВКонтакте создаст для пользователей персональные обложки с помощью искусственного интеллекта

2

Размеры ВК — все размеры элементов оформления группы VK

3

Размеры Живые обложки ВКонтакте

3

Вопросы для вк | Инстаграма #вопросы #вк #инстаграм | Смешные вопросы, Забавные факты, Шаблоны

8

Размеры Живые обложки ВКонтакте

3

Истории вк | Надписи, Забавные факты, История

5

Обложка для ВК – как сделать и установить обложку для группы

9

Вк на аву картинка #394589 — Скачать фото на аву в вк для девочек без лица | TIPIK — скачать

2

Красивые для профиля картинка #390768 — Самые красивые картинки на аватарку в вк и одноклассники — скачать

3

Иллюстрация Шапка Для группы вк \u0026quot;Городские сказки\u0026quot; в

2

Размеры Живые обложки ВКонтакте

4

Красивый задний фон — фото и картинки: 70 штук

3

Обложка для ВК без текста — TheSecondComin » shablon. pechenek.net

5

Размеры Живые обложки ВКонтакте

6

Обложка для вк | аниме | ВКонтакте

5

Фон для чата в вк темный (101 фото) » ФОНОВАЯ ГАЛЕРЕЯ КАТЕРИНЫ АСКВИТ

4

3 сервиса и программы для скачивания музыки из «ВКонтакте» — Лайфхакер

4

Дизайн обложки для группы ВК | Сайт веб-дизайнера фрилансера | Сайт веб-дизайнера фрилансера Яны Ходкиной

3

Обложки для вк (78 лучших фото)

4

Делаем красивые картинки для ВК | Размер картинки для поста ВК! — YouTube

9

Друг попросил сфотографировать на аву для ВК. | Пикабу

2

Обложка ВК для музыкальной группы | Пикабу

10

Классные картинки для вк (56 фото) — 56 фото

3

Нейросеть дня: генератор персональных обложек для профиля во «Вконтакте» — Нож

7

ВКонтакте» предлагает сделать обложку для страницы с помощью нейросети — Мой-портал.ру

4

Фон для чата в ВК красивый — 74 фото

2

Обложка для группы VK В контакте – заказать на Ярмарке Мастеров – QIWHORU | Создание дизайна, Новочеркасск

15

Картинки для группы: где взять красивые изображения для ВКонтакте

3

VK полностью преобразил профили. Стало похоже на реализацию сами знаете кого

6

DC Super Hero Girls: Красивые картинки с коробок кукол — Аватарки для ВК — YouLoveIt.ru

7

Дизайн обложки для группы ВК | Сайт веб-дизайнера фрилансера | Сайт веб-дизайнера фрилансера Яны Ходкиной

7

Размеры для группы ВК 2023: от обложки до постов

7

ВК оформление, дизайн, визуал | Дизайн, Дизайн обложки, Веб-дизайн

11

Размеры для группы ВК 2023: от обложки до постов

4

Размеры для группы ВК 2023: от обложки до постов

8

Пин от пользователя sveta ♡´・ᴗ・`♡ на доске ⚡templates (part 3) | Фото испытания, Фото с цитатами, Вопросы для пары

4

Обложки для группы ВКонтакте: шаблоны обложек сообществ ВК | Canva

2

Правила оформления изображений для таргета ВК

6

Создайте онлайн аватар для ВКонтакте ВК бесплатно с помощью конструктора Canva

16

Картинки для девочек на аву для вк (36 фото) — Забавник

6

Размеры Живые обложки ВКонтакте

2

Rademacher VK C-511-5 Материал печатной платы двухсторонний 35 мкм Фотопокрытие Положительный (Д x Ш) 200 мм x 150 мм 1 шт.

Rademacher VK C-511-5 Материал печатной платы двусторонний 35 мкм Фотопокрытие Положительный (Д x Ш) 200 мм x 150 мм 1 шт. | Конрад.com

Назад к основам печатных плат

  • № арт.: 1362881
  • № производителя: VK C-511-5
  • EAN: 2050003229715

Варианты

Размеры: ( x ) 100 мм x 50 мм Эпоксидный двусторонний Размеры: ( x ) 100 мм x 50 мм Односторонняя эпоксидная смола Размеры: ( x ) 100 мм x 75 мм Эпоксидный двусторонний Размеры: ( x ) 100 мм x 75 мм Односторонняя эпоксидная смола Размеры: ( x ) 150 мм x 100 мм Односторонняя эпоксидная смола Размеры: ( x ) 160 мм x 100 мм Эпоксидный двусторонний Размеры: ( x ) 160 мм x 100 мм Односторонняя эпоксидная смола Размеры: ( x ) 200 мм x 150 мм Эпоксидный двусторонний Размеры: ( x ) 200 мм x 150 мм Односторонняя эпоксидная смола Размеры: ( x ) 233,4 мм x 160 мм Эпоксидный двусторонний Размеры: ( x ) 233,4 мм x 160 мм Односторонняя эпоксидная смола Размеры: (x) 250 мм x 250 мм Эпоксидный двусторонний Размеры: ( x ) 250 мм x 250 мм Односторонняя эпоксидная смола Размеры: ( x ) 300 мм x 200 мм Эпоксидный двусторонний Размеры: ( x ) 300 мм x 200 мм Односторонняя эпоксидная смола

ФОТОПЛАСТИНА ПОЗИТИВ EP ДВОЙНАЯ 150X200MM

Полное описание

  • № арт. : 1362881
  • № производителя: VK C-511-5
  • EAN: 2050003229715

Варианты

Размеры: ( x ) 100 мм x 50 мм Эпоксидный двусторонний Размеры: ( x ) 100 мм x 50 мм Односторонняя эпоксидная смола Размеры: ( x ) 100 мм x 75 мм Эпоксидный двусторонний Размеры: ( x ) 100 мм x 75 мм Односторонняя эпоксидная смола Размеры: ( x ) 150 мм x 100 мм Односторонняя эпоксидная смола Размеры: ( x ) 160 мм x 100 мм Эпоксидный двусторонний Размеры: ( x ) 160 мм x 100 мм Односторонняя эпоксидная смола Размеры: ( x ) 200 мм x 150 мм Эпоксидный двусторонний Размеры: ( x ) 200 мм x 150 мм Односторонняя эпоксидная смола Размеры: ( x ) 233,4 мм x 160 мм Эпоксидный двусторонний Размеры: ( x ) 233,4 мм x 160 мм Односторонняя эпоксидная смола Размеры: (x) 250 мм x 250 мм Эпоксидный двусторонний Размеры: ( x ) 250 мм x 250 мм Односторонняя эпоксидная смола Размеры: ( x ) 300 мм x 200 мм Эпоксидный двусторонний Размеры: ( x ) 300 мм x 200 мм Односторонняя эпоксидная смола

ПЛАСТИНА ДЛЯ ФОТО ПОЗИТИВ EP ДВОЙНАЯ 150X200MM

Полное описание

Фотопозитивная пластина

Комментарии

Отзывы клиентов

Похожие товары

  • Услуги
  • Руководства и учебные пособия
  • Тесты и обзоры продуктов

Дополнительные услуги

Посмотрите и откройте для себя другие элементы из категории PCB Essentials

Rademacher VK C-510-1 Материал печатной платы односторонний 35 мкм Фотопокрытие Положительный (Д x Ш) 100 мм x 50 мм 1 шт.

Rademacher VK C-510-1 Материал печатной платы односторонний 35 мкм Фотопокрытие Положительный (Д x Ш) 100 мм x 50 мм 1 шт. | Конрад.com

Назад к основам печатных плат

  • № арт.: 1362869
  • № производителя: VK C-510-1
  • EAN: 2050003229593

Варианты

Размеры: ( x ) 100 мм x 50 мм Эпоксидный двусторонний Размеры: ( x ) 100 мм x 50 мм Односторонняя эпоксидная смола Размеры: ( x ) 100 мм x 75 мм Эпоксидный двусторонний Размеры: ( x ) 100 мм x 75 мм Односторонняя эпоксидная смола Размеры: ( x ) 150 мм x 100 мм Односторонняя эпоксидная смола Размеры: ( x ) 160 мм x 100 мм Эпоксидный двусторонний Размеры: ( x ) 160 мм x 100 мм Односторонняя эпоксидная смола Размеры: ( x ) 200 мм x 150 мм Эпоксидный двусторонний Размеры: ( x ) 200 мм x 150 мм Односторонняя эпоксидная смола Размеры: ( x ) 233,4 мм x 160 мм Эпоксидный двусторонний Размеры: ( x ) 233,4 мм x 160 мм Односторонняя эпоксидная смола Размеры: (x) 250 мм x 250 мм Эпоксидный двусторонний Размеры: ( x ) 250 мм x 250 мм Односторонняя эпоксидная смола Размеры: ( x ) 300 мм x 200 мм Эпоксидный двусторонний Размеры: ( x ) 300 мм x 200 мм Односторонняя эпоксидная смола

ФОТОПЛАСТИНА ПОЗИТИВ EP ОДИНАРНАЯ 50X100MM

Полное описание

  • № арт.
Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *