Journal : Ajouter [plus de 500|des] polices de caractères à votre distribution Linux
Posté par LeBouquetin () le 12 mars 2006Amateur d'infographie, je restais sur ma faim avec ma distribution Debian Sarge jusqu'à peu... Je me souviens de mon bon vieux 166MMX avec Win95 et Corel Draw et les centaines de polices disponibles sur les CDs... que je n'ai plus :( J'ai donc fouiné un peu sur l'internet et j'ai trouvé une solution satisfaisante.
Voici la procédure que j'ai suivi avec succès :
1. Configurer sa distribution correctement en suivant par exemple les conseils de cet article - http://www.the-asw.com/articles/2005/08/01/2-comment-avoir-d(...)
2. Récupérer des polices (libres de préférence, mais pas forcément) sur l'internet. Là, c'est fontolino.de qui m'a bien aidé :-p
Oui, mais voilà, sur fontolino, il faut cliquer sur chaque police pour la télécharger, et j'avais pas envie de passer des heures sur le site en question qui comporte plus de 500 polices...
J'ai donc créé des outils adéquats pour récupérer les polices qui sont proposées au téléchargement sous forme de fichier zip. Ces outils sont écrits en PHP et sont à utiliser en ligne de commande. c'est cette procédure que je vais expliquer ici.
Récupérer et installer les polices de Fontolino
1. Télécharger les polices de caractère
Lorsqu'on télécharge les polices "manuellement" depuis fontolino.de, on constate que les urls sont de la forme http://www.fontolino.de/files/download.php?d=123 où d est l'identifiant de la police (ici police n°123)...
J'ai donc commencé par récupérer toutes les polices à l'aide de l'outil dont le code apparait ci-dessous.
<?php
// fichier get_fonts.php
if ($argc != 3)
{
echo "usage: php get_fonts.php first last\nwhere first and last are (included) indexes\n\n";
}
else
{
for($i=$argv[1]; $i<=$argv[2]; $i++)
{
$url = "http://www.fontolino.de/files/download.php?d=".$i;
$name = "font-".$i.".zip";
$command = "wget -q -O $name $url";
echo $command." ...";
exec($command);
echo "ok\n";
}
}
?>
Cet outil est exécuté en ligne de commande [ php get_fonts.php id_debut id_fin ]. Il exécute simplement wget avec les paramètres appropriés pour récupérer les polices et les sauvegarder dans le dossier courant.
Note : dans mon cas, id_debut vaut 1 et id_fin vaut 500.
2. Extraire les fichiers
A ce niveau, on se retrouve avec une série de fichiers zip de la forme font-123.zip. Il faut alors supprimer les fichiers vides (correspondant à des identifiant de police inexistant). On les détectera facilement à l'aide d'un gestionnaire de fichiers en constatant que leur taille est de quelques octets seulement.
L'étape suivante consiste à dézipper tous ces fichiers. J'ai donc utilisé un outil qui se content d'extraire tous les fichiers d'un zip :
<?php
//fichier extract_font_files.php
// ouverture du dossier courant en lecture
if($dir_handle = opendir("."))
{
while($file = readdir($dir_handle))
{
// on ne traite que les fichiers ".zip"
if(strlen($file)>=3 && substr($file,-3)=="zip")
{
echo "Archive file : $file\n";
$zip_file = zip_open($file);
// pour ces fichiers on extrait tout le contenu
while ($zip_entry = zip_read($zip_file))
{
$zipped_file_name = zip_entry_name($zip_entry);
echo "> Font file : $zipped_file_name\n";
// on ouvre le fichier contenu dans le zip et on l'extrait localement
if (zip_entry_open($zip_file, $zip_entry, "r"))
{
$zipped_file_content = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$new_file_handle = fopen($zipped_file_name, "w");
fwrite($new_file_handle, $zipped_file_content);
fclose($new_file_handle);
zip_entry_close($zip_entry);
}
}
}
}
closedir($dir_handle);
}
?>
Cet outil est exécuté en ligne de commande [ php extract_font_files.php ]. Il extrait simplement tous les fichiers contenus dans tous les zip du répertoire courant.
Remarque : cela pose un problème quant aux licences d'utilisation des différentes polices :la licence se trouve dans un fichier texte inclus dans le zip qui sera écrasé par les fichiers de licence suivants.
3. Installer les polices
On se retrouve maintenant avec un dossier bien rempli, contenant :
- les fichiers zip,
- les fichiers des polices (ttf, otf),
- les fichiers php.
Reste à installer les polices qui nous intéressent... Rien de plus facile : visualiser le dossier à l'aide d'un gestionnaire de fichiers tel que Nautilus permet de prévisualiser les polices et de sélectionner celles qui nous intéressent. On se contentera alors de les copier (utilisateur root) dans un sous-dossier de /usr/share/fonts/truetype/ créé à cet effet, par exemple /usr/share/fonts/truetype/fontolino.de. La réouverture de session devrait suffire à les prendre en compte.
Conclusion
La station GNU/Linux propose maintenant une série de polices de qualité variable mais riche. Il n'y a plus qu'à les utiliser :-p
Cette solution n'est vraisemblablement pas la plus simple ni la plus rapide, elle permettra néanmoins aux utilisateurs familiers du langage PHP d'enrichir leur système.
Ressources
Packages nécessaires à la manipulation :
- wget
- php4
- php4-cli
- php4-common
Liens utiles :
- Configurer ses polices : http://www.the-asw.com/articles/2005/08/01/2-comment-avoir-d(...)
- Fontolino, des polices à télécharger : http://www.fontolino.de
- Documentation php : http://nexen.net
> Lire le journal (9 commentaires, moyenne: 3,1).
Bash c'est bien aussi
J'imagine qu'en infographie vous ne faites pas de scripting Unix. Ce n'est pas un reproche, mais voici un shell bash qui fait plus ou moins la meme chose.
#téléchargement
for i in `seq 0 100`
do wget -q -O font-${i}.zip http://www.fontolino.de/files/download.php?d=$i
done
#On supprime les fichiers vides
ls -s | awk '{if($1 == 0) system("rm " $2);}'
#on extrait maintenant les zip:
for i in *.zip
do unzip $i
done
C'est bien entendu très leger, à etoffer, les limites se configurent à la main, mais ça fait la meme chose :)
-
[^]Re: Bash c'est bien aussi
-
[^]Re: Bash c'est bien aussi
Posté par Sébastien Koechlin () le 13/03/2006 à 11:35. (lien). Évalué à 4.Avec find on peut faire le rm peut-être plus simplement :
find . -size 0 -exec rm {} \;Si on veut faire moins de fork et parce que rm supporte plusieurs fichiers en même temps, on peut fairefind . -size 0 -type f -print0 | xargs -0
Le -type f ne sélectionne que les fichiers, et le -print0/-0 permet de fonctionner avec des noms de fichier contenant des espaces.-
[^]Re: Bash c'est bien aussi
Posté par liberforce (Jabber id, page perso, ) le 13/03/2006 à 15:31. (lien). Évalué à 3.il me semble que t'as oublié le rm dans la deuxième commande...
-
-
[^]Re: Bash c'est bien aussi
Posté par LeBouquetin () le 13/03/2006 à 18:59. (lien). Évalué à 1.En fait, je suis plus développeur qu'infographiste... et plus développeur qu'administrateur. Donc pondre 100 lignes de PHP, c'était pour moi plus rapide que cette solution (qui est nettement plus élégante...).
Promis je me mets au shell...
larabie
Les polices Larabie ne sont pas incluses dans Sarge ? Il y en a une bonne quantité.
-
[^]Re: larabie
Posté par LeBouquetin () le 13/03/2006 à 19:07. (lien). Évalué à 1.Si elles sont dispo dans Sarge :
- ttf-larabie-deco > 157 polices
- ttf-larabie-straight > 155 polices
- ttf-larabie-uncommon > 142 polices
En fait, cette manipulation a été initiée lorsque je me suis mis à la recherche de la police AlfredDrake... qu'on trouve notamment sur fontolino.de
Les journaux sont destinés à des informations qui ne sont pas suffisamment intéressantes
pour être validées en dépêche (sinon n'hésitez pas à proposer votre information en
dépêche), qui sont sans rapport avec Linux ou le libre, ou simplement pour donner votre
avis. Si vous désirez poser une question, merci d'utiliser 

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.