Versió inicial: CLI i GUI Tk per a fonts bitmap

This commit is contained in:
2026-04-26 15:22:07 +02:00
parent 49b8917a46
commit c862f5aab8
6 changed files with 959 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
# 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):
```sh
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):
```sh
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
```sh
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:
```sh
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):
```sh
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.