Генератор изображений в стиле String art
String art – вид искусства создания изображений путём специального переплетения нитей. Обычно на каком-нибудь материале, например, деревянной дощечке, вбиваются гвозди или закручиваются винты, за которые зацепляется нить и, последовательно зацепляясь за них, создаётся какой-нибудь рисунок. Подобные картины зачастую вешаются в доме для создания дополнительного уюта. Основным плюсом такой техники является простота реализации. Требуется только быть довольно внимательным, чтобы зацепить нить именно за нужный очередной гвоздь или винт. Создавать картины в стиле string art можно как вручную, так и автоматически - сегодня существуют даже целые машины, которые самостоятельно подготавливают основание и выполняют натягивание нитей, однако и в том и другом случае необходимо иметь последовательность гвоздей, требующуюся для конкретной картины. Именно поэтому мы решили написать генератор string art изображений.
Что умеет генератор
Как следует из названия, он может превращать произвольные изображения в изображения в стиле string art. При этом результат работы можно сохранить в виде png и svg изображений, а также в специальном stringart формате, который можно открыть в нашем онлайн редакторе графов.
Помимо самого создания генератор позволяет изменить некоторые параметры входного изображения для создания наиболее качественного рисунка:
- яркость
- контрастность
- инверсия яркости
Сам же арт также имеет несколько настроек:
- количество гвоздей – чем больше гвоздей, чем точнее и качественнее может получиться арт, однако с ростом количество время генерации также будет увеличиваться
- количество линий – аналогично количеству гвоздей, влияет на детализацию получаемого изображения
- непрозрачность линий – позволяет воссоздавать оттенки за счёт наложения нескольких линий с прозрачностью
- цвет линий и фона – на случай, если захочется добавить в арт красок :)
Как работает генератор
Алгоритм работы генератора на самом деле довольно прост:
- Выбирается гвоздь, с которого будет начат процесс переплетения, после чего необходимо выбрать гвоздь, в который провести линию
- Для этого среди всех возможных линий подсчитывается средняя яркость пикселей исходного изображения и выбирается линия, имеющая наименьшую яркость.
- Проведённая линия "удаляется" из исходного изображения путём прибавления к значениям пикселей этой линии значения непрозрачности (если непрозрачность равна 100%, то за одну линию все соответствующие пиксели исходного изображения станут белыми, а получаемая картинка очень быстро превратится в сплошную залитую фигуру). Таким образом использование прозрачности позволяет создавать оттенки.
- Далее начальным гвоздём становится тот, что находится на конце добавленной линии и процесс начинается сначала.
Если этого описания кажется мало и хочется посмотреть на исходники, то они доступны по ссылке: github.com/dronperminov/StringArtGenerator