# 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.