Pixel Art programático
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
Esa imagen está hecha con una técnica llamada Pixel Art programático. La idea es representar una imagen como una matriz (array bidimensional) donde cada número corresponde a un color.
Por ejemplo:
const pixelArt = [ [0,0,1,1,0], [0,1,2,1,0], [1,1,1,1,1], [0,1,1,1,0], [0,1,0,1,0] ];
Y una paleta de colores:
const PALETTE = { 0: null, // Transparente 1: "#FFFFFF", // Blanco 2: "#FF0000" // Rojo };
Luego recorres la matriz y dibujas cada píxel en un <canvas>.
Ejemplo básico con Canvas
<canvas id="canvas"></canvas> <script> const pixelArt = [ [0,0,1,1,0], [0,1,2,1,0], [1,1,1,1,1], [0,1,1,1,0], [0,1,0,1,0] ]; const PALETTE = { 1: "#FFFFFF", 2: "#FF0000" }; const PIXEL_SIZE = 20; const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); canvas.width = pixelArt[0].length * PIXEL_SIZE; canvas.height = pixelArt.length * PIXEL_SIZE; pixelArt.forEach((row, y) => { row.forEach((pixel, x) => { if (pixel !== 0) { ctx.fillStyle = PALETTE[pixel]; ctx.fillRect( x * PIXEL_SIZE, y * PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE ); // Borde opcional ctx.strokeStyle = "#333"; ctx.strokeRect( x * PIXEL_SIZE, y * PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE ); } }); }); </script>
Resultado:
██ █▄█ █████ ███ █ █
Cómo hacer imágenes más complejas
Normalmente se usan herramientas como:
Estas herramientas permiten dibujar el pixel art y luego exportarlo a una matriz de colores para JavaScript.
Efecto brillante como en tu imagen
Después de dibujar cada píxel puedes agregar sombras:
ctx.shadowBlur = 15; ctx.shadowColor = "white"; ctx.fillRect( x * PIXEL_SIZE, y * PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE );
O usando CSS:
canvas { filter: drop-shadow(0 0 10px white); }
Versión moderna usando DIVs
También puedes generar cada píxel como un <div>:
pixelArt.forEach((row) => { row.forEach((pixel) => { const div = document.createElement("div"); div.style.width = "20px"; div.style.height = "20px"; div.style.background = PALETTE[pixel] || "transparent"; container.appendChild(div); }); });
Pero para imágenes grandes es mucho más eficiente usar Canvas, que es precisamente como suelen hacerse los ejemplos que muestra Bluuweb y otros cursos de JavaScript.
Si quieres, puedo crear un ejemplo completo que convierta automáticamente una imagen PNG en una matriz como la de la foto y luego la dibuje con JavaScript.
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:
- Una imagen puede guardarse como una tabla de números.
- Cada número representa un color.
- 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úmero | Color |
|---|---|
| 1 | Amarillo |
| 2 | Negro |
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.
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
Comentarios
Publicar un comentario