94 lines
3.2 KiB
Markdown
94 lines
3.2 KiB
Markdown
# 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 32–126 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.
|