Pixel Art programático

 Si es para alumnos de preparatoria, lo mejor es comenzar con algo muy visual y sencillo, sin funciones avanzadas ni conceptos complicados. La idea es que entiendan que:

  1. Una imagen puede guardarse como una tabla de números.
  2. Cada número representa un color.
  3. JavaScript recorre la tabla y dibuja cuadritos.

¿Cómo funciona?

Imagina que quieres dibujar una carita feliz:

⬜ ⬜ 🟨 🟨 ⬜
⬜ 🟨 🟨 🟨 ⬜
🟨 🟨 ⬛ 🟨 🟨
⬜ 🟨 🟨 🟨 ⬜
⬜ 🟨 ⬜ 🟨 ⬜

Podemos representarla con números:

const dibujo = [
[0,0,1,1,0],
[0,1,1,1,0],
[1,1,2,1,1],
[0,1,1,1,0],
[0,1,0,1,0]
];

Donde:

  • 0 = transparente
  • 1 = amarillo
  • 2 = negro

Código completo

Guarda este código como index.html y ábrelo en el navegador.

<!DOCTYPE html>
<html>
<head>
<title>Pixel Art con JavaScript</title>
</head>
<body>

<h2>Mi primer Pixel Art</h2>

<canvas id="lienzo"></canvas>

<script>

// MATRIZ DEL DIBUJO
const dibujo = [
[0,0,1,1,0],
[0,1,1,1,0],
[1,1,2,1,1],
[0,1,1,1,0],
[0,1,0,1,0]
];

// TAMAÑO DE CADA PIXEL
const tamPixel = 40;

// COLORES
const colores = {
1: "yellow",
2: "black"
};

// OBTENER EL CANVAS
const canvas = document.getElementById("lienzo");
const ctx = canvas.getContext("2d");

// TAMAÑO DEL CANVAS
canvas.width = dibujo[0].length * tamPixel;
canvas.height = dibujo.length * tamPixel;

// RECORRER FILAS
for(let fila = 0; fila < dibujo.length; fila++){

// RECORRER COLUMNAS
for(let columna = 0; columna < dibujo[fila].length; columna++){

let valor = dibujo[fila][columna];

// SI NO ES 0, DIBUJAR
if(valor !== 0){

ctx.fillStyle = colores[valor];

ctx.fillRect(
columna * tamPixel,
fila * tamPixel,
tamPixel,
tamPixel
);

// BORDE
ctx.strokeRect(
columna * tamPixel,
fila * tamPixel,
tamPixel,
tamPixel
);
}
}
}

</script>

</body>
</html>

Explicación paso a paso

1. La matriz

const dibujo = [
[0,0,1,1,0],
[0,1,1,1,0]
];

Es como una hoja cuadriculada.

Cada número indica qué color usar.


2. Los colores

const colores = {
1: "yellow",
2: "black"
};

Le decimos a JavaScript:

NúmeroColor
1Amarillo
2Negro

3. Los ciclos

for(let fila = 0; fila < dibujo.length; fila++)

Recorre cada fila.

Luego:

for(let columna = 0; columna < dibujo[fila].length; columna++)

Recorre cada columna.

Es como leer una tabla:

(0,0) (0,1) (0,2)

(1,0) (1,1) (1,2)

(2,0) (2,1) (2,2)

4. Obtener el valor

let valor = dibujo[fila][columna];

Ejemplo:

dibujo[0][2]

vale:

1

Entonces se dibuja amarillo.


5. Dibujar el cuadrado

ctx.fillRect(
columna * tamPixel,
fila * tamPixel,
tamPixel,
tamPixel
);

Si el pixel mide 40:

columna 0 → x = 0
columna 1 → x = 40
columna 2 → x = 80
columna 3 → x = 120

Así cada cuadrado queda en su lugar.


Ejercicio para los alumnos

Pedirles que cambien la matriz para formar una letra.

Por ejemplo la letra "T":

const dibujo = [
[1,1,1,1,1],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0]
];

O un corazón:

const dibujo = [
[1,0,0,0,1],
[1,1,0,1,1],
[1,1,1,1,1],
[0,1,1,1,0],
[0,0,1,0,0]
];

Así entienden de manera muy visual cómo los arreglos bidimensionales y los ciclos pueden convertirse en imágenes, que es exactamente la idea detrás del Pixel Art que aparece en tu ejemplo

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

n-funcion - el botón-n

Objetos básicos en JavaScript