Arte Generativo

Arte generativo con Python

Este es el primer ejemplo de una serie de tutoriales de arte generativo que tengo en mente crear. Empezaré con Arte generativo con Python pero tengo pensado utilizar varios lenguajes de programación.

Por si no sabes qué es el arte generativo.

Generative Art with Python

El objetivo principal de que esté creando esta entrada sobre arte generativo es la misma que en tutoriales anteriores para otras tecnologías, poder consultar en el futuro y no tener que volverme loco navegando por diferentes carpetas y sitios web.

Para este ejemplo en concreto trabajaremos con las librerías de Python: PIL, numpy y tqdm.

Descubre más: Librería PIL para PythonLibrería numpyLibrería para barras de progreso tqdm.

Sencillo ejemplo para crear Arte generativo con Python.

  • Importamos librerías necesarias para este ejemplo de arte generativo con Python.
  • Creamos el array de píxeles y los rellenamos de color (veremos 3 variantes).
  • Formamos la imagen con los píxeles que hemos rellenado anteriormente.
  • Mostramos la imagen.
  • Guardamos la imagen con el nombre de generative numpy.

Importamos las librerías

from PIL import Image, ImageDraw
import numpy as np
from numpy import random
from tqdm import tqdm

Generamos el array y formamos la imagen

imagen_size = 1000
arr = np.zeros([imagen_size, imagen_size, 3], dtype=np.uint8)

for i in tqdm(arr):
    arr[::1, ::random.randint(1, imagen_size/2)] = [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]

img = Image.fromarray(arr)
dibujar_imagen = ImageDraw.Draw(img)
img.show()
img.save('generative-numpy.png')

Si ejecutamos nuestro archivo .py con este script sin modificar nada obtendríamos un resultado similar a la Imagen 1. Digo similar porque el color de las barras verticales es aleatorio, así que me extraña que salgan dos iguales.

generative art numpy
Imagen 1

En el bucle for he añadido una sencilla barra de progreso para que la impaciencia no se apodere de nuestro cuerpo con algunos ejemplos más pesados.

Para que veas lo sencillo que es ver algunas modificaciones en el resultado, voy a modificar una sola línea de código, exactamente la que está dentro de nuestro bucle for.

arr[::1, ::random.randint(1, imagen_size/2)] = [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]

Con esta línea que acabamos de ver le indicamos a nuestro array los valores RGB que van a formar nuestra imagen de la siguiente forma:

En cada posición que recorremos en nuestro array:

arr[::1, ::random.randint(1, imagen_size/2)] =

Generamos tres números aleatorios de entre 0 y 255

[random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]

Generative Image 2

Vamos a ver el resultado en la Imagen 2, modificando estos tres valores, dejaré aleatorio únicamente el último, para los otros dos colocaré el valor 0, quedando la línea de la siguiente forma:

arr[::1, ::random.randint(1, imagen_size/2)] = [0, 0, random.randint(0, 255)]

No es muy de extrañar que una imagen que tiene sus píxeles configurados de esta forma salga azul.

  • Red = 0
  • Green = 0
  • Blue = número aleatorio entre 0 y 255
Imagen 2

Generative Image 3

Por último cambiaré la configuración para que salga mucho más verde la imagen 3.

arr[::1, ::random.randint(1, imagen_size/2)] = [0, random.randint(0, 255), 0]
  • Red = 0
  • Green = número aleatorio entre 0 y 255
  • Blue = 0
Imagen 3

Con este pequeño ejemplo sobre arte generativo con Python doy por terminado el tutorial. Recuerda que aparte de modificar el valor de los colores para cada pixel, puedes modificar también la forma de recorrer el array con numpy y mucho más.