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

Полезные ссылки

Читайте так же:

  • [Перевод] Испытание по криминалистической экспертизе дампа .NET[Перевод] Испытание по криминалистической экспертизе дампа .NET Это испытание с MetaCTF CyberGames 2021, в рамках которого нужно было выполнить криминалистическую экспертизу дампа памяти .NET. Проведение такой экспертизы может быть многим незнакомо, так что, надеюсь, данная статься окажется полезной.Вход в NET В качестве торжественного финала пришло […]
  • Tiny code: CRC, Gnome Sort etc…Tiny code: CRC, Gnome Sort etc… В этой статье представлены некоторые известные алгоритмы, которые как смог, переработал до крошечного вида. Данные образцы оптимизированы по размеру, но не по скорости выполнения. mov esi, text ; адрес начала строки mov ecx, 6 ; длина строки xor eax, eax ; инициализация линии задержки […]
  • Обновленный CLS заработал в Search ConsoleОбновленный CLS заработал в Search Console 1 июня обновленный показатель «Совокупное смещение макета» (Cumulative Layout Shift. CLS) – одна из метрик в составе Core Web Vitals – заработал в Google Search Console. Об этом сообщается на странице Data Anomalies в Справке сервиса. Поскольку Google продублировал то же […]
  • Крохотный спутник будет изучать атмосферные процессы горячих юпитеровКрохотный спутник будет изучать атмосферные процессы горячих юпитеров 27 сентября НАСА запускает на ракете «Атлас-5» микроспутник под названием «колорадский ультрафиолетовый транзитный эксперимент». Собранный в лаборатории атмосферной и космической физики (LASP) колорадского университета в Боулдере спутник предназначен для изучения атмосфер массивных […]