decor-6-expe/font_pixellizer/README.md

169 lines
4.6 KiB
Markdown
Raw Normal View History

2026-02-10 21:30:40 +01:00
# Font Pixelizer
Ensemble d'outils Python pour transformer n'importe quelle typographie en version pixelisée avec paramètres.
## Fonctionnalités
- **Pixelisation complète** : Convertit une fonte vectorielle en version pixelisée
- **Contrôle de la taille des pixels** : De très détaillé à très pixellisé
- **Modification des proportions** : Hauteur d'x et largeur ajustables
- **Support monospace** : Option pour forcer un espacement fixe
- **Formes de pixels personnalisables** : Carré, rond, losange
## Dépendances
Ce site peut aider à l'installation: https://avoidsoftware.sarahgarcin.com/dependances.html
### Installer python fontforge
FontForge est un éditeur de polices de caractères libre et open source. En plus dintégrer Python, FontForge installe généralement un module Python accessible à lexécutable Python du système. FontForge est disponible dans son ensemble selon les termes de la GNU GPL version 3 ou toute version ultérieure. Cette extension permet la manipulation de typographies.
#### sur macOS
Nécessite Homebrew
- Ouvrir le terminal
-Lancer la commande ```brew install fontforge```
-Tester si Fontforge est bien exécutable par Python: ```python3 import fontforge, psMat```
-Si la commande ne fonctionne pas (Mac est un peu capricieux quand il sagit de Fontforge), il faut déplacer le module Fontforge vers les dépendances de Python:
```sudo cp $(find $(brew --prefix fontforge)/. -name "fontforge.so") $(python3 -c "import site;print(site.getsitepackages()[0]);")```
```sudo cp $(find $(brew --prefix fontforge)/. -name "psMat.so") $(python3 -c "import site;print(site.getsitepackages()[0]);")```
#### sur Linux
- Ouvrir le Terminal en utilisateur root
- Mettre à jour le gestionnaire de paquets:
```sudo apt update```
```sudo apt upgrade```
- Installer Python Fontforge
```python3-fontforge```
### Installer les autres dépendances
```bash
pip install fontforge svgpathtools lxml --break-system-packages
```
## Utilisation
### Script simple (une fonte)
```bash
python3 font_pixelizer.py votre_fonte.ttf
```
2026-02-10 21:35:00 +01:00
### Paramètres modifiables dans le script :
2026-02-10 21:30:40 +01:00
```python
# Taille des pixels
pixel_size = 80 # Plus grand = moins de détails, effet plus rétro
# Échelles de déformation
x_height_scale = 1.0 # 0.5 = écrasé, 2.0 = étiré verticalement
width_scale = 1.0 # 0.5 = condensé, 2.0 = étendu horizontalement
# Monospace
monospace = False # True pour forcer espacement fixe
monospace_width = None # Largeur fixe (None = auto-calculé)
# Style des pixels
pixel_shape = "square" # "square", "round", "diamond"
pixel_gap = 0 # Espace entre pixels (0 = collés)
round_corners = 0 # Rayon arrondi des coins (0 = coins droits)
# Export
new_family_name = "Pixel"
font_weight = "Regular"
export_formats = ["ttf"] # ["ttf", "otf", "woff", "woff2"]
```
2026-02-10 21:35:00 +01:00
### Ajouter de laléatoire
Pour ajouter de laléatoire dans les paramètres:
- voir exemple de configuration ligne 117 (commentée par défaut)
- voir exemple de configuration ligne 235 (commentée par défaut)
=> randrange(min, max, step)
2026-02-10 21:30:40 +01:00
## Exemples de configuration
### Fonte rétro 8-bit classique
```python
pixel_size = 120
x_height_scale = 1.0
width_scale = 1.0
pixel_shape = "square"
pixel_gap = 0
monospace = True
```
### Fonte pixel moderne arrondie
```python
pixel_size = 60
x_height_scale = 1.0
width_scale = 1.0
pixel_shape = "square"
pixel_gap = 2
round_corners = 8
monospace = False
```
### Fonte condensée haute résolution
```python
pixel_size = 40
x_height_scale = 1.2
width_scale = 0.8
pixel_shape = "square"
monospace = False
```
### Fonte rétro avec pixels espacés
```python
pixel_size = 100
x_height_scale = 1.0
width_scale = 1.0
pixel_shape = "round"
pixel_gap = 10
monospace = True
```
2026-02-10 21:35:00 +01:00
## Styles de pixels disponibles
2026-02-10 21:30:40 +01:00
### Square (carré)
```python
pixel_shape = "square"
round_corners = 0 # Coins droits
```
### Square arrondi
```python
pixel_shape = "square"
round_corners = 15 # Coins arrondis
```
### Round (cercle)
```python
pixel_shape = "round"
```
### Diamond (losange)
```python
pixel_shape = "diamond"
```
## Comment ça marche ?
1. **Extraction** : Le script extrait tous les glyphes de la fonte source en SVG
2. **Analyse** : Chaque glyphe est analysé pour déterminer sa forme
3. **Grille** : Une grille de pixels est calculée selon `pixel_size`
4. **Raycasting** : Pour chaque position de pixel, on teste si elle est dans le contour original
5. **Génération** : Les pixels sont créés sous forme de SVG
6. **Reconstruction** : Une nouvelle fonte est assemblée avec tous les glyphes pixelisés
7. **Export** : La fonte est exportée au format souhaité
## Licence
GNU GPL
---