Python и Samila. Делаем красиво
Содержание:
Введение
Установка | Запуск без установки
Работа с библиотекой Samila
Полезные ссылки
Введение
Samila — библиотека для создания генеративного искусства, написанная на языке программирования Python. В данный момент Samila позволяет создавать только статичные изображения. По заверению разработчиков, возможность анимации появится в ближайшее время.
В основе механизма генерации изображений библиотеки Samila лежит идея о преобразовании пространства квадратной формы, из Декартовой системы координат, в любую иную систему, например, такую как Полярная система координат. Samila позволяет создавать изображения, основанные на тысячах точек. Положение каждой отдельной точки рассчитывается по формуле со случайными параметрами. Из-за случайных чисел каждое изображение выглядит по-разному.
Установка | Запуск без установки
Для работы Samila необходима версия Python не ниже 3.5.
Установка библиотеки:
pip install samila
Запуск без установки:
Поработать с библиотекой можно и без установки на локальный компьютер. Например, в Google Colab. Я накидал несколько примеров, вот по этой ссылке. При желании можно скопировать себе (кнопка «Copy to Drive», если вы залогинены под своим Google аккаунтом).
Работа с библиотекой Samila
Быстрый старт. Генерация случайного изображения без каких-либо входных данных:
import matplotlib.pyplot as plt
from samila import GenerativeImage
g = GenerativeImage()
g.generate()
g.plot()
plt.show()
С сохранением в PNG:
from samila import GenerativeImage
g = GenerativeImage()
g.generate()
g.plot()
g.save_image(file_adr="test.png")
Если нужно сгенерировать заданное количество случайных изображений, чтобы было из чего выбрать:
from samila import GenerativeImage
for i in range(10):
g = GenerativeImage()
g.generate()
g.plot()
img_name = str(i+1) + "_test.png"
g.save_image(file_adr=img_name)
Основа для создания красивых изображений. Добавляем условий:
import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
def f1(x, y):
result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x)
return result
def f2(x, y):
result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
return result
g = GenerativeImage(f1, f2)
g.generate()
g.plot()
plt.show()
Проекция:
import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection
def f1(x, y):
result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x)
return result
def f2(x, y):
result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
return result
g = GenerativeImage(f1, f2)
g.generate()
g.plot(projection=Projection.POLAR)
plt.show()
По умолчанию вид проекции (projection): RECTILINEAR
Поддерживаемые виды проекций: RECTILINEAR, POLAR, AITOFF, HAMMER, LAMBERT и MOLLWEIDE:
Диапазон:
import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection
def f1(x, y):
result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x)
return result
def f2(x, y):
result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
return result
g = GenerativeImage(f1, f2)
g.generate(start=-2*math.pi, step=0.01, stop=0)
g.plot()
plt.show()
Цвет:
import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection
def f1(x, y):
result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x)
return result
def f2(x, y):
result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x
return result
g = GenerativeImage(f1, f2)
g.generate()
g.plot(color="yellow", bgcolor="black", projection=Projection.POLAR)
plt.show()
Регенерация (параметр seed):
import matplotlib.pyplot as plt
from samila import GenerativeImage
import random
import math
from samila import Projection
def f1(x, y):
result = random.gauss(0, 1) * math.sin(y)+ (x + y) * random.uniform(-1, 1)
return result
def f2(x, y):
result = random.uniform(-1, 1) * y * x + math.cos(x ** 2) + random.gauss(0, 1)
return result
g = GenerativeImage(f1, f2)
g.generate(seed=300)
g.plot(color="red", bgcolor="black", projection=Projection.POLAR)
plt.show()
Помимо всего вышеперечисленного, Samila также умеет:
Сохранять данные о полученных изображениях в формате JSON
Воспроизводить изображения на основе ранее сохранённых данных
Сохранять изображения в более высоком разрешении
Загружать изображения напрямую в NFT.storage