Journal Ajouter [plus de 500|des] polices de caractères à votre distribution Linux

Posté par  (site web personnel, Mastodon) .
Étiquettes :
0
12
mar.
2006
Introduction

Amateur 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=123d 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
  • # Bash c'est bien aussi

    Posté par  . Évalué à 10.

    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

      Posté par  . Évalué à 4.

      <humour>
      Oui mais tu comprends, le shell ça date de l'âge des dinausores de l'informatique, et il n'y a pas de boite qui fait plein de pub dessus : c'est pas hype.
      Donc c'est forcément nul...
      </humour>
    • [^] # Re: Bash c'est bien aussi

      Posté par  . É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 faire
      find . -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  (site web personnel, Mastodon) . É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...

      #tracim pour la collaboration d'équipe __ #galae pour la messagerie email __ dirigeant @ algoo

  • # larabie

    Posté par  (site web personnel) . Évalué à 2.

    Les polices Larabie ne sont pas incluses dans Sarge ? Il y en a une bonne quantité.
    • [^] # Re: larabie

      Posté par  (site web personnel, Mastodon) . É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

      #tracim pour la collaboration d'équipe __ #galae pour la messagerie email __ dirigeant @ algoo

  • # oui mais

    Posté par  . Évalué à 1.

    avec php il faut pas installer apache et mysql?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.