Содержание
Генерация схемы сборки картины-фотографии из LEGO
В августе месяце меня внезапно занесло на подработку, помимо основной работы. Задача оказалась для меня новой, но со стороны весьма несложной, а даже интересной.
Проект представляет из себя сайт, на котором находится конструктор картины. В нем можно загрузить фотографию, выбрать необходимый размер, подвигать привычные нам ползунки при редактировании фотки и посмотреть на то, как картина будет выглядеть в собранном состоянии. Картина состоит из огромной кучи маленьких деталей LEGO (1×1 блок), которые необходимо собрать на доске по схеме, полученной после покупки набора.
Проект был в состоянии демки, о чем свидетельствовала генерация PDF, которая просто показывала возможность вывода всего того, что надо без какого-либо выравнивания, стилей. Мне предстояло разработать генератор схемы по предоставленному макету (на фотографии выше листы именно с ним), переписать метод превью изображения на использования новых элементов.
Максимально коротко объясняю, но давайте договоримся, что вы будете переходить по оставленным ссылкам после абзацев и смотреть хотя бы на изображения, чтобы понимать о чем идёт речь.
Для оптимизации занимаемого место в памяти придумали не хранить в каждом пикселе его цвет, представленный в каком-либо виде, например, в RGB, а решили создать матрицу, так называемую палитру цветов изображения, а в пикселях ссылаться на элемент в палитре.
https://en.wikipedia.org/wiki/Indexed_color
Для решения нашей задачи необходимо получить в конечном счете изображение, которое имеет намного меньше пикселей (блоков LEGO) и, внимание, состоит из определенного перечня цветов! Никто на заводе не будет штамповать LEGO под определённый заказ пользователя.
Если с количеством пикселей думать не надо – изменяем размер изображения да на такой, чтобы его потом порезать на тайлы (фрагменты), при объединении которых получилась бы большая картина, то вот с цветами надо что-то придумать.
Я сказал придумать? Бросьте, за нас уже давно всё придумали. То, что нам надо, называется квантование цветов. Суть проста: максимально уменьшаем количество используемых цветов в палитре изображения так, чтобы визуально было похоже на оригинал.
https://en.wikipedia.org/wiki/Color_quantization
Уменьшив количество цветов, получаем неприятную картинку для глаза. слишком резкие перехода между цветами, пиксели сильно выделяются и это выглядит совсем не как оригинал. В рамках проекта по пикселизации фотографии этого достаточно так как именно то, что нам надо, но пробегусь чуть дальше, ибо это затрагивается библиотеками под капотом.
Для исправления положения с резкими переходами используют дизеринг. Как и в способах квантования, так и в дизеринге есть свои алгоритмы, которым десятки лет. Один из них очень популярный алгоритм – алгоритм Флойда – Стейнберга. Его реализация занимает считанные строки кода, но даже и этого вам не надо делать! Все есть в библиотеках для работы с изображениями.
https://en.wikipedia.org/wiki/Floyd–Steinberg_dithering
Для тех, кто решил не переходить по ссылкам выше продублирую то, о чем говорил. Оригинальная фотка, квантование цветов и дизеринг с квантованием.
Я уже упомянул, что количество цветов LEGO ограничено. Их что-то около 40 совершенно разнообразных. На проекте используется библиотека Pillow. Через которую практически всё делается с помощью одной строчки кода. Так к изображению применяется изменение размера, color, sharpness, contrast, brightness. Hue и saturation и прочие свистелки-перделки. В конечном итоге полностью заменяется палитра.
Помимо этого, конечно, происходит конвертация изображений к нужным форматам. Например, перегоняется из P в RGBA, потом убирается альфа и остается RGB. На выходе имеем изображением с 8-битным цветом. Следовательно, нам нужна палитра из 256 цветов, а мы помним, что уникальных цветов у нас ~40. Что делать? Нуу, например, удлинить палитру просто продолжив последовательность, пока не наберем нужное количество! Честно, я не могу это объяснить, данный код был написан прошлым разработчиком из известной в Беларуси, да и не только, компании) Передаю привет Игорю.
Продолжив последовательность из цветов создается новое пустое изображение, которому устанавливается эта палитра. Выглядит это чудо следующим образом:
А дальше дело за подкапотной Pillow! Метод .convert()
вызывается у исходного изображения, в котором надо изменить палитру. Принимает в аргументах режим (мод), в нашем случае это 8bit – мод P, алгоритм дизеринга (None
– не применять) и наше изображение с палитрой. Вот так просто.
В документации расписали какой и когда алгоритм используется – PIL.Image.Image.convert
Результат пикселизации
Ниже исходное изображение и результаты в размере 512×512 и 128×128.
Генерация превью
Дело осталось за малым – рендер. У нас есть изображение достаточно маленьких размеров, например, 256 на 256 пикселей. Оно, в свою очередь, в PDF будет состоять из тайлов, например, 32×32. Для рендера превью просто проходимся по каждому пикселю изображения, маппим цвет пикселя с картиной блока LEGO и собираем так целое изображение, состоящее из 256 изображений блоков.
Генерация PDF
В самом начале я говорил, что генерация PDF уже была, но, увы, та библиотека, на которой оно работало, мне не подходила. От меня просили векторную графику, чтобы при увеличении не терялось качество, но составлять надо было схемы, конечно же, из иконок, которые обозначают цвет. Поэтому я начал копать в сторону использования SVG в библиотеке reportlab. С помощью неё и сгенерировал всё. Помимо векторной графики необходима поддержка разных размеров и форматов. Так, например, PDF должна быть в формате А3 и А4, цветном и чёрно-белом режиме. В чёрно-белом присутствовали только изображения (иконки) цветов, а в цветном у них был фон. Ко всему этому мы имеем кучу размеров картин, количества тайлов и их расположения! Всё это должно было быть мега резиновым! Таким и вышло. Практически все размеры высчитываются динамически при генерации, где-то используются коэффициенты. Код от такого преображается в худшую сторону. Везде сплошные подсчеты отступов, ширин и высот, координат размещения, границ объектов.
Первая страница содержит превью картины и правильное расположение тайлов для сборки. Дальше идет N количество страниц, равное количеству тайлов. Под каждой таблицей есть количество необходимых LEGO-блоков, а на первой странице общее количество.
Примеры сетки:
Как вы понимаете, количество комбинацией куча. Так что главная задача – сделать масштабируемо!
Вот так выглядит схема одного тайла в цветном и чёрно-белом варианте варианте:
Не спрашивайте почему в таблице-статистике остались цвета, хотя PDF в черно-белом формате рассчитана для пользователей, у которых нет цветного принтера. Таково пожелание заказчика. Я вообще не понимаю, почему они сами распечатать не могут и положить в коробку вместе с LEGO, но это не моего ума дело.
Считаю, что получилось хорошо, но можно было лучше. Мне не совсем нравятся границы таблицы, выравнивание в таблице-статистике. Но я шатал эти размеры шрифтов высчитывать.
А ТЕПЕРЬ О САМОМ ВКУСНОМ, НО В ХАОТИЧНОМ ФОРМАТЕ.
Помните, я говорил про вектор? Дык я сделал, да, без проблем. Нашел библиотеку, что конверит svg в rlg (reportlab graphics object). Так и называется, svg2rlg. И всё бы ничего, но генерация на моем компьютере занимала больше минуты. Под две даже. ДВЕ минуты на генерацию PDF, карл! Я пытался оптимизировать, конечно же только один раз прогревал эти svg файлы конвертя в rlg, пытался оптимайзить, но узкое место и было как раз в использование этих объектов.
Как бы уже все смирились с тем, что столько будет генериться… Покажут проверку оплаты пользователю и ладно. Дошло дело до деплоя… Вся эта радость оказалась не на машине нормальной, человеческой, хотя тут FastAPI со всеми эндпоинтами, а, блин, на AWS лямбдах! И вызов функций через gateway! В обход всей валидации параметров, что дает FastAPI! Ну это ничего, подумал я, но стало чего тогда, когда я узнал, что gateway не держит timeout больше 30 секунд! Даже за тысячу долларов тебе не включат такую возможность. Пошел я сообщать печальную новость и предложил три варианта решения проблемы.
Я не бросил экспериментировать с оптимизацией и попробовал поработать с PNG и JPG. Вариант с PNG 1000×1000 не лучше SVG, а даже хуже, а вот с JPG отрабатывает за считанные секунды! Я был удивлен скорости! Генерация PDF с 2 минут упала до 3-4 секунд! Вы представляете? Я радуюсь тому, что запрос работает за секунды, когда мы все привыкли к мс! Только за счет того, что я не использовал png/svg, а взял jpg! Объяснил ситуацию, взяли 1000×1000 изображения, что дают хороший запас увеличения PDF без потери качества, запросил изображения с цветным фоном, так как это jpg и я не могу отрисовать фон сам в ячейке.
Короче, я сдал проект.
31.12.2022 — Итоги Года
2022
31.12.2021 — Итоги Года
2021
31.12.2020 — Итоги Года
2020
16.07.2020 — Разное
Ваш переезд: Яндекс.Музыка -> Spotify
Фотоконструктор QBRIX Poster — Пксель-арт, собери свою цветную картину по фото из деталей Lego
- Картины
- Фотокартины MOZABRICK и QBRIX
- Фото-конструктор Poster (QBRIX)
Артикул:
Q50003
Новинка
14%
youtube.com/embed/M45_sTtzdTI» frameborder=»0″ allowfullscreen=»allowfullscreen»>
РАЗВИВАЕТ МОТОРИКУ РУК
КОЛЛЕКЦИОННАЯ МОДЕЛЬ
ДЛЯ ДЕТЕЙ И ВЗРОСЛЫХ
УМСТВЕННАЯ РАЗГРУЗКА
УВЛЕЧЕНИЕ С ПОГРУЖЕНИЕМ НА МНОГИЕ ЧАСЫ
СДЕЛАНО В РОССИИ
Фотокартина Poster от QBRIX на 3500 кубиков
Фото-конструктор QBRIX — это современные черно-белые картины в стиле пиксель-арт. Состоит он из 3500 маленьких кубиков, таких же как в лего, из которых вы легко соберете самостоятельно картину, которой может стать любая ваша фотография. Все что вам нужно, это загрузить фотографию на сайт и использовать уникальный код который вы найдете в наборе QBRIX. Далее, нейросеть сделает все необходимое и, через пару минут, вы получите инструкцию по сборке вашей фотокартины в стиле пиксель-арт.
QBRIX — это пазлы нового поколения, которые обеспечат вам отличный интересный досуг и уникальный интерьерный экспонат. Такой арт объект будет точно замечен вашими гостями и друзьями.
Фото-конструктор QBRIX можно пересобирать столько раз, сколько захотите! Надоела эта картина, загрузите новое фото и соберите новую картину в стиле пиксель-арт.
Конструкторы QBRIX поставляются в трех вариациях, отличающихся цветом: Original, Solar и Poster. Выберите подходящий на свой вкус и приступайте к сборке картины своими руками. Вы получите не только массу приятных впечатлений, но и яркое дополнение к вашему интерьеру.
QBRIX идет в качественной упаковке, которая может служить рамкой для вашей картины, она имеет даже специальный зацепку для подвешивания на стене.
Дарите необычные подарки! Собирайте уникальные пиксель-арт картины вместе с QBRIX!
Характеристики
Размер картины | 40×40 см |
Кол-во кубиков в наборе | 3500 |
Количество цветов | 5 |
Время сборки | 6-7 часов |
Страна-производитель | Россия |
Производитель (Бренд) | QBRIX |
Название | Фото-конструктор Poster |
Количество деталей | 3500 |
Размер картины | 40х40 см |
Коллекция | Настольные игры |
Тематика | Черно-белое |
Тип товара | Пазл |
Уровень сложности | Средний |
Материал | Твердый пластик без запаха |
Размер упаковки ДхВхШ (см) | 45х44х3 |
Упаковка | Картонная коробка |
Особенности | Картина по фото в Ч/Б цвете в стиле пиксель-арт |
Пол (м/ж) | Унисекс |
Форма пазла | Квадрат |
Целевая аудитория | Взрослая |
Количество цветов | 5 |
Минимальный возраст ребенка | От 14 лет |
youtube.com/embed/M45_sTtzdTI» frameborder=»0″ allowfullscreen=»allowfullscreen»>
Информация о технических характеристиках, комплекте поставки, стране изготовления и внешнем виде товара носит справочный характер и основывается на последних доступных к моменту публикации сведениях
Сообщить о неточности в описании
Обломай меня — Разбей свои фото!
Быстрая отправка, доставка по всему миру
Доставка из Сиднея, Австралия
Богатая кирпичная палитра из 50 цветов
Выйдите за рамки LEGO Mosaic Maker.
Простота настройки и сборки
Лучший индивидуальный подарок!
Как это работает
Воспользуйтесь веб-приложением Brick Me Creator, чтобы создать свою собственную персонализированную мозаику в стиле LEGO® бесплатно! Закажите комплект Brick Me в комплекте с кубиками, опорными плитами и простыми инструкциями, чтобы собрать свой Brick Art самостоятельно. Это как головоломка раскраски по номерам!
Подробнее
Цены
Выберите ориентацию
Выберите размер
XS
S
M
L
XL
119,00 $ USD
Базовые пластины 3×3
Вот несколько примеров различных размеров, которые вы можете создать , но можно гораздо больше.
Посмотрите, как рассчитывается цена здесь
Отзывы
«Такой особый подарок для нашей семьи это…
Шерил
«Это так потрясающе и поставляется со всем, что вы…
Тина
«Очень понравилось и рисовать, и размещать эту картину…
Мюррей
«Мама получила огромное удовольствие за последние несколько недель…
Дженна
«Готово, и нам это очень нравится. Мы тщательно…
Шарон
«Спасибо @brickme_ за увековечение моего…
Зина
«Мне нравится наше свадебное фото, мы с мужем сделали это…
Лиза
«Это был отличный проект для школы праздники и…
Зои
‘Эта фотомозаика LEGO – отличная идея для подарка!…
Зоар
«Мне нравится, как получилась эта мозаика! Спасибо @brickme_…
Робин
«Если вы ищете лучший персонализированный подарок…
Барак
«Наблюдать за картиной вместе было так…
Холли
«Большое спасибо, ваша служба поддержки второй до…
Alecia
«Очень понравился этот уникальный и личный подарок, как и людям, которых я…
Мелинда
«Приятный проект для нашей семьи, быстрая доставка и…
Кимберли
«Моя 12-летняя дочь получила это на Рождество. Она поставила…
Лия
«Я был очень впечатлен своим готовым продуктом и…
Джейн
«Моя жена только что закончила свой подарок на День матери. 1,2 м в длину…
Крис
«Мне подарили это на Рождество, и это было так много…
Карен
«Мы только начали нашу работу и рады видеть завершение…
Кристин
«Очень доволен тем, как получилось у меня 👌🏼 спасибо Брик ME»
Бретт
«Эта прекрасная работа Lego-Art была разработана и заказана…
Митчелл
«Я одержим со всем, что связано мой мех…
Мэтью
«Отличная идея для подарка! Получил в подарок ко Дню отца…
Martin
«Один из лучших семейных подарков! Нам было так весело…
Бен
«Кирпичи меня, спасибо, мой законченный арт моей любимой Зои 🐶…
Шазз
«Забавно собирать, а конечный продукт представляет собой уникальный кусочек…
Деннис
«Наша вторая мозаика @brickme_ готова!… 20 разных цветов…
Крис
«Как большой поклонник Шанайи Твен, я был рад приехать…
Шейн
«На Рождество мне подарили Мозаику. И…
Раумати
«У нас был замечательный день, @dreamitcon пообщался с…
Nik
«Такой особенный подарок для нашей семьи, это…
Шерил
«Это так потрясающе, и в нем есть все, что вам нужно…
Тина
4 Мюррей
«Маме было очень весело за последние несколько недель…
Дженна
Подробнее
Общие вопросы
Мы рекомендуем два варианта выставления ваших прекрасных творений на обозрение.
- Скомпонуйте. Вы можете получить у нас рамку, которая идеально подойдет для вашего Brick Pic, или заказать индивидуальную рамку в магазине рамок. Посмотрите наше видео, чтобы узнать, как сделать рамку для вашего Brick Pic!
- Прикрепите опорные плиты непосредственно к стене с помощью наших специальных монтажных планок Nano. Полосы изготовлены по специальной технологии без использования клея, их можно многократно прикреплять, снимать и использовать повторно, не оставляя следов и не повреждая стены.
Да! Наши простые инструкции похожи на раскраску по номерам, только с кубиками. Просто поместите прозрачную основу на сетку с цветными цифрами и начните создавать изображение. Это очень легко и очень весело делать самому или с друзьями и семьей!
Из-за низкого спроса на эту услугу мы в настоящее время предлагаем услуги по сборке мозаики только для наших коммерческих клиентов. Пожалуйста, свяжитесь с нами для получения дополнительной информации.
В среднем на одну базовую плиту уходит около 45 минут. Не волнуйтесь, если это займет у вас больше времени — следующий будет быстрее!
Обычно мы отправляем заказы в течение 1-2 рабочих дней с даты покупки с нашего склада в Чатсвуде, Новый Южный Уэльс, Австралия. Ориентировочные сроки доставки зависят от вашего местоположения и способа доставки (стандартный или экспресс). Мы используем Почту Австралии для доставки, вы можете проверить их веб-сайт, чтобы узнать время доставки внутри страны (Австралия) здесь, а время международной доставки здесь. Ознакомьтесь с нашей страницей политики доставки для получения дополнительной информации о доставке.
Базовые платы не соединяются друг с другом напрямую. Лучший способ собрать мозаику — это закрепить ее на стене. См. «Как повесить Brick Pic на стену?»
Наши опорные пластины выпускаются одного размера: 24×24 штифта (19,2 x 19,2 см). Вы можете комбинировать эти базовые плиты для создания кирпичной мозаики самых разных размеров. Например, базовые пластины 3 на 4 (всего 12 базовых пластин) дадут вам размер 76,8 на 57,6 см.
Наши кубики не имеют торговой марки LEGO, но они совместимы с кубиками LEGO. В нашей цветовой палитре есть много цветов, которые не являются официальными цветами LEGO.
Подробнее
- Следите за нами здесь
- И здесь тоже
Copyright 2023 Brick Me Pty Ltd | Положения и условия — Политика конфиденциальности
LEGO® является товарным знаком группы компаний LEGO, которая не спонсирует, разрешать или поддерживать этот сайт. Brick Me® не рекламирует и не продает продукцию LEGO®.
Убей меня — Убей свои фото!
Быстрая отправка, доставка по всему миру
Доставка из Сиднея, Австралия
Богатая кирпичная палитра из 50 цветов
Выйти за рамки LEGO Mosaic Maker.
Простота настройки и сборки
Лучший индивидуальный подарок!
Как это работает
Воспользуйтесь веб-приложением Brick Me Creator, чтобы создать свою собственную персонализированную мозаику в стиле LEGO® бесплатно! Закажите комплект Brick Me в комплекте с кубиками, опорными плитами и простыми инструкциями, чтобы собрать свой Brick Art самостоятельно. Это как головоломка раскраски по номерам!
Подробнее
Цены
Выберите ориентацию
Выберите размер
XS
S
M
L
XL
119,00 $ USD
Опорные плиты 3×3
900 04 Это несколько примеров различных размеров, которые вы можете создать, но возможно гораздо больше.
Посмотрите, как рассчитывается цена здесь
Отзывы
«Такой особый подарок для нашей семьи это…
Шерил
«Это так потрясающе и идет со всем, что вы…
Тина
» Абсолютно понравилось как проектирование и поставить эту картинку…
Мюррей
«Мама получила огромное удовольствие за последние несколько недель…
Дженна
«Готово, и нам это очень нравится. Мы тщательно…
Шэрон
«Спасибо @brickme_ за увековечение моего…
Зина
«Мне нравится наше свадебное фото, мы с мужем сделали это…
Лиза
«Это был отличный проект для школы праздники и…
Зоя
‘Эта фотомозаика LEGO — отличная идея для подарка!…
Зоар
«Мне нравится, как получилась эта мозаика! Спасибо @brickme_…
Робин
«Если вы ищете лучший персонализированный подарок…
Барак
«Наблюдать за картиной вместе было так…
Холли
«Большое спасибо, ваша служба поддержки второй после…
Alecia
«Понравилась эта уникальная и личная идея подарка, как и людям, которым я…
Мелинда
“Приятный проект для нашей семьи, быстрая доставка и…
Кимберли
«Моя 12-летняя дочь получила это на Рождество. Она поставила…
Лия
«Я был очень впечатлен своим готовым продуктом и…
Джейн
«Моя жена только что закончила свой подарок на День матери. 1,2 м в длину…
Крис
“Мне подарили это на Рождество, и это было так много…
Карен
“Мы только начали нашу работу и рады видеть завершение…
Кристин
” Очень доволен тем, как получилось у меня 👌🏼 спасибо Brick ME”
Бретт
«Эта прекрасная работа Lego-Art была спроектирована и заказана…
Митчелл
«Я одержима всем, что касается моего меха…
Мэтью
«Отличная идея для подарка! Получил в подарок ко Дню отца…
Martin
«Один из лучших семейных подарков! Нам было так весело…
Бен
«Кирпичи меня. Спасибо, мой законченный арт моей любимой Зои 🐶…
Шазз
«Весело собирать, а конечный продукт — уникальный кусочек…
Деннис
«Наша вторая мозаика @brickme_ готова!…
Мэдди
«Завершил мой проект, 63 подставки, 20 разных цветов…
Крис
расслабляющий приход …
Шейн
«Мне подарили Мозаику на Рождество. И…
Раумати
«У меня был замечательный день, когда @dreamitcon поболтал с…
Ник
«Такой особенный подарок для нашей семьи, это…
Шерил
«Это так потрясающе, и в нем есть все, что вы…
Тина
«Безумно понравилось создавать и размещать эту картинку…
Мюррей
«Мама получила огромное удовольствие за последние несколько недель…
Jenna
Подробнее
Часто задаваемые вопросы
Мы рекомендуем два варианта выставления ваших прекрасных творений на обозрение.
- Рамка. Вы можете получить у нас рамку, которая идеально подойдет для вашего Brick Pic, или заказать индивидуальную рамку в магазине рамок. Посмотрите наше видео, чтобы узнать, как сделать рамку для вашего Brick Pic!
- Прикрепите опорные плиты непосредственно к стене с помощью наших специальных монтажных планок Nano. Полосы изготовлены по специальной технологии без использования клея, их можно многократно прикреплять, снимать и использовать повторно, не оставляя следов и не повреждая стены.
Да! Наши простые инструкции похожи на раскраску по номерам, только с кубиками. Просто поместите прозрачную основу на сетку с цветными цифрами и начните создавать изображение. Это очень легко и очень весело делать самому или с друзьями и семьей!
Из-за низкого спроса на эту услугу мы в настоящее время предлагаем услуги по сборке мозаики только для наших коммерческих клиентов. Пожалуйста, свяжитесь с нами для получения дополнительной информации.
В среднем на одну базовую плиту уходит около 45 минут. Не волнуйтесь, если это займет у вас больше времени — следующий будет быстрее!
Обычно мы отправляем заказы в течение 1-2 рабочих дней с даты покупки с нашего склада в Чатсвуде, Новый Южный Уэльс, Австралия. Ориентировочные сроки доставки зависят от вашего местоположения и способа доставки (стандартный или экспресс). Мы используем Почту Австралии для доставки, вы можете проверить их веб-сайт, чтобы узнать время доставки внутри страны (Австралия) здесь, а время международной доставки здесь.