Extraire des glyphes et fusionner des fontes de caractères

Comment générer une nouvelle fonte à partir de glyphes extraites de différentes fontes ?

1 janvier 2015

Rappels

glyphe est la représentation graphique d'un caractère.

fonte est un ensemble de glyphes.

ttf ou truetype font est un format de fichier informatique définissant une fonte. Ce format est compatible avec tous les navigateurs récents. svg, otf et woff sont d'autres formats de fichiers définissant une fonte

python est un langage informatique utilisé par le logiciel fontforge.

Exemple d'utilisation

Nous avons utilisé cette méthode dans notre projet lyon.glicer.com. Notre besoin était d'extraire uniquement les chiffres d'une fonte et de les fusionner avec une autre fonte contenant nos icônes, afin de générer un seul fichier ttf, svg, otf ou woff de plus petite taille.

Pré-requis

fontforge doit être installé, ce logiciel libre permet d'éditer des fontes.

Sous windows, ajouter manuellement le répertoire d'installation de fontforge dans la variable d'environnement PATH.

Créer le script python

Créer un fichier fusion.py contenant le code ci-dessous :

import fontforge
fontnumbers = fontforge.open("src/digital.ttf",1)       #fonte a partir de laquelle on veut extraire uniquement les chiffres

fontnumbers.selection.select(("ranges",None),"0","9")   #selection des caracteres de 0 a 9
fontnumbers.copy()                                      #copie dans le presse-papier

fontfusion = fontforge.font()                           #creation d'une nouvelle fonte
fontfusion.selection.select(("ranges",None),"0","9")    #selection des caracteres de 0 a 9 de la nouvelle fonte

fontfusion.paste()                                      #copie les glyphes des chiffres selectionnes dans la fonte digital.ttf

fontfusion.mergeFonts("src/icons.ttf")                  #ajoute la fonte qui contient les icones

fontfusion.generate("build/getter.ttf")                 #resultat de la fusion au format ttf
fontfusion.generate("build/getter.svg")                 #resultat de la fusion au format svg
fontfusion.generate("build/getter.woff")                #resultat de la fusion au format woff
fontfusion.generate("build/getter.otf")                 #resultat de la fusion au format otf

Exécuter le script python

Exécuter la ligne de commande ci-dessous :

fontforge -script fusion.py

Cela affiche :

Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
 Based on sources from 09:21 AWST 27-Nov-2014-ML-TtfDb-D.
 Based on source from git with hash: c4cea471798c92848170c2f47311979805966093

Analyse des résultats

FontesTaille
digital.ttf et icons.tff51 Ko
getter.ttf14 Ko

Arborescence finale

│   fusion.py

├───build
│       getter.ttf
│       getter.svg
│       getter.otf
│       getter.woff

└───src
       digital.ttf
       icons.ttf

Versions des logiciels et langages utilisés