Использование Python для создания произведений искусства.
Делиться

Вы когда-нибудь бывали в художественном музее и удивлялись, как такое, казалось бы, обычное произведение искусства может стать настолько знаменитым или быть продано за такую высокую цену? Или как произведение искусства, которое, казалось бы, так легко создать с помощью таких простых техник, может быть настолько почитаемым и привлекать множество участников торгов? Именно так обстоит дело с картинами Хирста, изображающими пятна.
Дэмиен Херст — английский художник, известный своим современным искусством, посвященным жизни, смерти и красоте. Его знаменитые картины с пятнами представляют собой заполненные круги разных цветов, расположенные в виде сетки на светлом фоне. Эти картины, несмотря на свою простоту, продавались на аукционах за сумму, достигающую миллиона долларов!
В этой статье мы будем использовать модули colorgram и turtle в Python для создания точечных картин, вдохновляясь цветовой палитрой и техниками Хирста. Это простой и понятный для начинающих урок по Python, но он требует базовых знаний основ Python, а также создания объектов и использования методов, импорта и использования модулей Python. В этом увлекательном уроке по Python мы научимся реализовывать концепцию ООП в программировании, а также узнаем, как достичь поставленных целей, используя модули и всего несколько строк кода.
Давайте пробудим в себе художника, изучая программирование на Python!
Точечные картины
Картины Хирста, выполненные в технике точечной живописи, представляют собой небольшие пятна разных цветов, расположенные в виде сетки. Эти картины уникальны как по количеству точек, так и по используемой цветовой палитре. Мы воспользуемся модулем colorgram в Python, чтобы извлечь цветовую палитру из этих столь почитаемых картин, а затем используем модуль turtle в Python для отрисовки этих пятен в виде сетки. Мы можем указать количество точек на холсте, а также расстояние между ними и используемую цветовую схему.
Для ознакомления, вы можете посмотреть эти картины по этой ссылке.
Извлечение цветов
Первым делом нужно извлечь цветовую палитру из одной из картин Хирста. Мы загрузим картину в ту же директорию, что и файл Python, в котором будем писать нашу программу. Но сначала давайте установим модуль colorgram, введя следующие команды в терминал:
pip install colorgram.py
Далее мы импортируем модуль colorgram в наш код и используем функцию extract, указав в качестве аргументов файл изображения и количество цветов, которые мы хотим извлечь из эталонного изображения. Вот файл изображения, который я скачал как «ref.jpg» и использовал для определения цветовой палитры моей сгенерированной на Python точечной живописи.
import colorgram colors = colorgram.extract(«ref.jpg»,20) print(colors)
При выполнении приведенных выше строк кода будет выведено 20 цветов, присутствующих в эталонном изображении:

Обратите внимание, что цвета, извлеченные выше, имеют формат, отличный от формата модуля turtle. Теперь мы преобразуем эти цвета в цвета, совместимые с модулем turtle.
Создание списка цветов
Сначала мы создадим пустой список и будем добавлять извлеченные цвета по одному, предварительно отформатировав их в формат RGB. Мы получим значения r, g и b каждого из извлеченных цветов и сохраним их в созданном списке с соответствующим форматированием. Для этого мы будем использовать цикл for:
rgb_colors = [] for color in colors: r = color.rgb.rg = color.rgb.gb = color.rgb.b new_color = (r, g, b) rgb_colors.append(new_color) print(rgb_colors)

Как видно из приведенного выше изображения, цвета RGB были правильно отформатированы и теперь могут быть использованы для случайного выбора цветов точек.
Импорт Turtle и настройка основных параметров
Теперь мы импортируем модуль Python turtle для создания нашего изображения. Мы определим основные настройки нашей черепашки. Первая — это colormode(), которая определит, как мы будем использовать цвета в нашем дальнейшем коде: либо от 0 до 1, либо от 0 до 255. Подробнее об этой функции можно узнать по этой ссылке.
import turtle turtle.colormode(255) tim = Turtle() tim.shape(«turtle») tim.color(«coral»)
Поскольку мы используем цвета RGB в формате 0-255, мы добавили 255 в качестве аргумента. Кроме того, мы создали объект черепахи из класса Turtle в модуле Python turtle, назвали его tim, а также настроили его форму и цвет. В дальнейшем мы будем использовать эту черепаху в качестве инструмента для рисования.
Располагаем нашу черепаху
Теперь, когда мы создали объект черепахи, давайте визуализируем его с помощью объекта экрана.
from turtle import Screen screen = Screen() screen.exitonclick()

Как видно на изображении выше, черепашка расположена посередине экрана. Нам нужно, чтобы черепашка находилась в одном из углов, чтобы она начала рисовать точки в линию. В качестве отправной точки можно выбрать нижний левый угол, при этом черепашка будет двигаться слева направо, а затем вверх, рисуя точки.
Этого можно добиться с помощью функции `setheading()`, которая принимает в качестве параметра угол для задания направления движения черепахи. После нескольких проб и ошибок мы выяснили, что это можно сделать, установив угол равным 225. Затем мы переместимся вперед на определенное расстояние, скажем, 300. Вот как выглядит наша черепаха в левом нижнем углу:

Мы снова установим направление движения черепахи на 0, поэтому можем начать рисовать точки.

Рисование точек
Теперь, когда направление движения нашей черепашки задано, мы начнём рисовать точки. Мы будем использовать метод `dot` черепашки, который принимает размер точки и цвет для заливки. Рисование точек будет осуществляться с помощью цикла `for`, учитывая общее количество точек, которое мы хотим создать. Если нам нужна сетка 10 на 10 точек, общее количество точек будет равно 100. После каждой десятой точки черепашка должна подняться на одну линию и продолжить рисование. Для этого мы будем использовать операцию по модулю. Кроме того, мы импортируем и используем модуль `random` для случайного выбора цвета для каждой точки.
В цикле for мы будем использовать методы forward и setheading для создания точек, движущихся сначала вперед, а затем вверх:
import random number_of_dots = 100 for dot_count in range(1, number_of_dots + 1): tim.dot(20, random.choice(rgb_colors)) tim.forward(50) if dot_count % 10 == 0: tim.setheading(90) tim.forward(50) tim.setheading(180) tim.forward(500) tim.setheading(0)

Скрывая черепаху и линии
После того, как точки созданы, нам нужно скрыть черепашку и линии. Это легко сделать с помощью методов hideturtle() и penup().
tim.penup() tim.hideturtle()
Вот как будет выглядеть конечный результат после выполнения указанных выше строк кода:

Заключение
Как видно выше, мы успешно создали прекрасное произведение искусства, используя точечную технику Хирста. Модуль colorgram в Python позволил нам извлечь красивую цветовую палитру, а модуль turtle помог нам создать произведение искусства, используя эту палитру. Это лишь базовый пример того, как можно создавать такие прекрасные произведения с помощью кода, и что происходит, когда искусство и программирование совпадают.
Источник: towardsdatascience.com





















