Files

3.2 KiB
Raw Permalink Blame History

font-gen

Generador de fuentes bitmap (.gif + .fnt) desde TrueType, pensado para motores de juego con sistema de texto indexado por paleta.

El GIF de salida usa una paleta de 2 colores: índice 0 = fondo, índice 1 = glifo. El .fnt acompañante registra el ancho visual real (medido en píxeles) de cada caracter.

Procesa 124 caracteres: ASCII 32126 más extensiones para castellano, catalán y valenciano (ÀÁÈÉÌÍÒÓÙÚÑÇ y minúsculas, ¡¿«»·).

Instalación

En Debian/Ubuntu, todo via apt en una sola línea (recomendado):

sudo apt install python3-tk python3-pil python3-pil.imagetk
  • python3-pil es Pillow (no en PyPI con ese nombre).
  • python3-pil.imagetk es el bridge PIL ↔ Tk que la GUI usa para el preview.
  • python3-tk es tkinter; no se puede instalar con pip ni un venv lo soluciona, porque es un binding C que vive en la stdlib del sistema.

Alternativa con pip (Pillow en venv, tkinter sigue siendo apt):

sudo apt install python3-tk
pip install -r requirements.txt        # o: pip install Pillow

Opcional: tener imagemagick (binario magick) en el PATH para que el GIF se reduzca a una paleta estricta de 2 colores tras guardarlo. Si no está, el script funciona igualmente.

Uso

GUI

python3 font_gen.py            # sin argumentos abre la interfaz Tk
python3 font_gen.py --gui      # explícito

Selecciona un TTF, ajusta el tamaño y pulsa GENERAR. Los ficheros .gif y .fnt se escriben junto a font_gen.py. El preview se actualiza en vivo mostrando la cuadrícula completa de caracteres.

Las opciones avanzadas (columns, box_width, box_height) están ocultas por defecto; ábrelas si necesitas tamaños de celda fijos — útil para fuentes de pixel-art donde el TTF tiene un bitmap strike exacto.

CLI

Desde TTF:

python3 font_gen.py --ttf myfont.ttf --size 8 --output myfont
python3 font_gen.py --ttf myfont.ttf --size 8 --output myfont --box-width 8
python3 font_gen.py --ttf myfont.ttf --size 16 --output myfont --dir ./out

Desde un GIF de fuente existente con cuadrícula (regenera el .fnt midiendo anchos desde los píxeles, sin re-rasterizar):

python3 font_gen.py --gif myfont.gif --output myfont \
    --columns 16 --box-width 10 --box-height 7 --cell-spacing 1

Lista completa de opciones: python3 font_gen.py --help.

Cómo se eligen los caracteres

  1. Glifo nativo: si el TTF tiene el caracter en su cmap, se dibuja tal cual.
  2. Fallback ASCII: si no, y el caracter está en la tabla de fallbacks (Á → A, ñ → n, …), se dibuja la versión ASCII en la celda pero el .fnt registra el codepoint original, así el texto localizado sigue resolviendo aunque visualmente se vea sin acento.
  3. Omitido: si no hay glifo ni fallback, el caracter se descarta y no aparece en el .fnt.

Esto permite usar fuentes pixel-art genéricas con texto en castellano/catalán/valenciano sin que el TTF tenga explícitamente cada acento.

Estructura

  • font_gen.py — núcleo de rasterizado + CLI.
  • font_gen_gui.py — interfaz Tk; importa el núcleo.

Ambos ficheros standalone: cópialos a cualquier directorio y ejecútalos.