edito
forum (21 054)
making of
preview newsletter
photoshop shortcuts
plan du site
bétisier (24)
nouveautés (67)
mises à jour
bannières (92)
liste de diffusion
infos légales
 


 

Devenez awares ! Et essayez de survivre.




aperçu
 

 

login | logout
gérez votre profil
devenez membre
membres (2138)
anniversaires (796)
awares (349)
mickeys (343)
notables (83)
modérateurs (9)
votre vie privée

 

 

amis (22)
gfx français (58)
gfx autres (383)
pixel art (67)
ascii art (0)
paint/draw (97)
communautés (27)
portails gfx (16)
ressources (36)
flash (253)
3D (38)
java (2)

proposez votre site
dernières entrées
aléatoire (999)
quicklist
top 10










































999 sites
445 596 hits
 
 

à propos des tutos
tous les tutos (48)
rechercher un tuto

tutos aléatoires
253 194 hits

 

 

screen fonts
brushes
softwares
 
 
 

 

stats publiques
infocentres
référents (1863)
refs quicklist (1863)
visiteurs uniques
awards

2 561 448 hits
 




ous serez probablement amenés, généralement pour générer le contenu ou le menu d'une interface au pixel, à transformer une chaîne de caractères, quelle qu'elle soit, en une suite d'images représentant respectivement les lettres de la chaine. La fonction de transformation de chaîne en images est éminemment simple, aussi insitera-t-on sur la flexibilité/adaptabilité du code et la rigueur apportée à celui-ci pour minimiser la quantité de travail déjà importante (26 lettres, 10 chiffres, 30 caractères spéciaux - ponctuation et autres - soit environ 70 caractères par planche graphique)


 

Créez un répertoire lettres/ dans votre arborescence. Créez un sous-répertoire désignant la typo-image que vous voulez utiliser. Dans l'exemple suivant, on utilisera la typo 04b25 (voir ci-dessous) sans anti-alias : on aura créé un répertoire lettres/04b25/ . Dans ce répertoire on stockera les images représentant chacune des lettres affichables (70 environ si la planche est assez complète, 30 voire 10 suffisent parfois).




Créez sous photoshop une planche d'images standard : 26 lettres et 10 chiffres. Cadrez les images au plus près des lettres (pas d'espacement) et sauvez les fichiers au format gif transparent sous les noms lettre_<lettre>.gif. Vous devriez avoir dans le répertoire lettres/04b25/ une trentaine de fichiers :

lettre_0.gif
lettre_1.gif
lettre_2.gif
...
lettre_a.gif
lettre_b.gif
...

Quand la planche est finie, créez finalement un fichier spacer.gif de dimension 1x1 pixel, transparent ne contenant aucun calque. Vous pouvez maintenant fermer photoshop (cette étape est passablement longue et laborieuse, accordé). Avec votre éditeur de texte préféré, créez un nouveau fichier fonctions_lettres.php contenant une fonction transformer_en_images() qui accepte un paramètre (chaîne de caractères) et qui retourne une suite d'images au format HTML. Voici la fonction standard :

function transformer_en_images($chaine)
{
   $images_retournees="";
   // BOUCLE DE PARCOURS DE LA CHAINE
   for ($i=0;$i<strlen($chaine);$i++)
   {
      $caractere_lu=substr($chaine,$i,1);

      // VERIFICATION DE LA PRESENCE DU FICHIER
      if (is_file("../lettres/04b25/lettre_$caractere_lu.gif"))
      {
         // LE FICHIER EXISTE
         // AJOUT D'UNE IMAGE A LA SEQUENCE RETOURNEE
         $images_retournees.="<img src=../lettres/04b25/lettre_$caractere_lu.gif>";
         // AJOUT DE L'ESPACE INTER-LETTRE
         $images_retournees.="<img src=../lettres/04b25/spacer.gif width=1 height=1>";
      }
   }
   return ("$images_retournees");
}

Sauvez le fichier fonctions_lettres.php. La fonction transformer_en_images() lit caractère par caractère la chaîne, remplace chacun des caractères par son image respective et retourne une chaîne au format HTML contenant les images. Entre chacune des lettres, elle aura inséré une image transparente spacer.gif pour créer l'espacement. Si le fichier-image n'existe pas, le caractère lu est supprimé et la lettre n'est pas affichée. La fonction n'est pas encore opérationnelle comme le montre l'exemple ci-dessous, mais vous pouvez déjà la tester :

<?
   include ("fonctions_lettres.php");
   $chaine="l'empire galactique";
   $images=transformer_en_images("$chaine");
   print ("$images");
?>

Résultat :



Les étapes suivantes consisteront à la rendre plus souple pour une utilisation plus généralisée (paramètrage de l'espacement, du répertoire d'images, affichage des caractères spéciaux,etc).


 

Vous aurez remarqué que certains caractères spéciaux n'ont pas été interprétés par la fonction parce que leur équivalent en fichier n'existait pas (espace, apostrophe, etc). Nous allons gérer individuellement ces cas particuliers (lettre_..gif ou lettre_/.gif ne sont pas des noms de fichiers valides) en surchargeant notre fonction :

function transformer_en_images($chaine)
{
   $images_retournees="";
   // BOUCLE DE PARCOURS DE LA CHAINE
   for ($i=0;$i<strlen($chaine);$i++)
   {
      $caractere_lu=substr($chaine,$i,1);

      // GESTION DES CARACTERES SPECIAUX
      if ($caractere_lu==".") $caractere_lu="point";
      if ($caractere_lu=="'") $caractere_lu="apostrophe";
      if ($caractere_lu==":") $caractere_lu="deux_points";
      if ($caractere_lu=="/") $caractere_lu="slash";
      if ($caractere_lu=="é") $caractere_lu="e";
      if ($caractere_lu=="è") $caractere_lu="e";
      if ($caractere_lu=="ê") $caractere_lu="e";
      if ($caractere_lu==" ") $caractere_lu="espace";

      // VERIFICATION DE LA PRESENCE DU FICHIER
      if (is_file("../lettres/04b25/lettre_$caractere_lu.gif"))
      {
         // LE FICHIER EXISTE
         // AJOUT D'UNE IMAGE A LA SEQUENCE RETOURNEE
         $images_retournees.="<img src=../lettres/04b25/lettre_$caractere_lu.gif>";
         // AJOUT DE L'ESPACE INTER-LETTRE
         $images_retournees.="<img src=../lettres/04b25/spacer.gif width=1 height=1>";
      }
   }
   return ("$images_retournees");
}

Créez maintenant sous photoshop les fichiers lettre_point.gif, lettre_apostrophe.gif, lettre_slash.gif... sur le même principe.

La même fonction donne maintenant pour résultat :




 

Il serait maintenant agréable de pouvoir paramétrer l'espacement entre les lettres pour produire différentes mises en page avec la même typo ( rappelez-vous comme il est long de faire une planche ). La nouvelle version accepte un paramète de plus : la largeur de l'espacement entre les lettres exprimée en pixels :

function transformer_en_images($chaine, $espacement_entre_lettre)
{
   $images_retournees="";
   // BOUCLE DE PARCOURS DE LA CHAINE
   for ($i=0;$i<strlen($chaine);$i++)
   {
      $caractere_lu=substr($chaine,$i,1);

      // GESTION DES CARACTERES SPECIAUX
      if ($caractere_lu==".") $caractere_lu="point";
      if ($caractere_lu=="'") $caractere_lu="apostrophe";
      if ($caractere_lu==":") $caractere_lu="deux_points";
      if ($caractere_lu=="/") $caractere_lu="slash";
      if ($caractere_lu=="é") $caractere_lu="e";
      if ($caractere_lu=="è") $caractere_lu="e";
      if ($caractere_lu=="ê") $caractere_lu="e";
      if ($caractere_lu==" ") $caractere_lu="espace";

      // VERIFICATION DE LA PRESENCE DU FICHIER
      if (is_file("../lettres/04b25/lettre_$caractere_lu.gif"))
      {
         // LE FICHIER EXISTE
         // AJOUT D'UNE IMAGE A LA SEQUENCE RETOURNEE
         $images_retournees.="<img src=../lettres/04b25/lettre_$caractere_lu.gif>";
         // AJOUT DE L'ESPACE INTER-LETTRE
         $images_retournees.="<img src=../lettres/04b25/spacer.gif width=$espacement_entre_lettre height=1>";
      }
   }
   return ("$images_retournees");
}

Voici le résultat en appelant la fonction transformer_en_images($chaine,4) :




 

Remarquez que l'image transparente servant à créer les espacements entre lettres a une hauteur de 1 pixel, ce qui crée une irrégularité dans la zone sensible comme le montre le schéma suivant relatif à l'image créée dans l'étape précédente:



<- zone sensible

Or, si vous décidez de mettre un lien sur votre séquence d'images, seul les lettres seront cliquables et le pixel inférieur des espaces. Pour remédiez à cela, il faudrait pouvoir faire varier la hauteur de l'image transparente simulant les espaces de manière à avoir une zone sensible comme celle-ci :



<- nouvelle zone sensible

La nouvelle version gère ce principe en rajoutant le paramètre "hauteur de lettre". On pourra enfin choisir le nom du répertoire dans lequel prendre les images (dans le cas où vous auriez le courage et le temps de faire plusieurs planches de 70 caractères) :

function transformer_en_images($chaine, $espacement_entre_lettre,$hauteur_de_lettre,$rep_fonts)
{
   $images_retournees="";
   // BOUCLE DE PARCOURS DE LA CHAINE
   for ($i=0;$i<strlen($chaine);$i++)
   {
      $caractere_lu=substr($chaine,$i,1);

      // GESTION DES CARACTERES SPECIAUX
      if ($caractere_lu==".") $caractere_lu="point";
      if ($caractere_lu=="'") $caractere_lu="apostrophe";
      if ($caractere_lu==":") $caractere_lu="deux_points";
      if ($caractere_lu=="/") $caractere_lu="slash";
      if ($caractere_lu=="é") $caractere_lu="e";
      if ($caractere_lu=="è") $caractere_lu="e";
      if ($caractere_lu=="ê") $caractere_lu="e";
      if ($caractere_lu==" ") $caractere_lu="espace";

      // VERIFICATION DE LA PRESENCE DU FICHIER
      if (is_file("../lettres/$rep_fonts/lettre_$caractere_lu.gif"))
      {
         // LE FICHIER EXISTE
         // AJOUT D'UNE IMAGE A LA SEQUENCE RETOURNEE
         $images_retournees.="<img src=../lettres/$rep_fonts/lettre_$caractere_lu.gif border=0>";
         // AJOUT DE L'ESPACE INTER-LETTRE
         $images_retournees.="<img src=../lettres/$rep_fonts/spacer.gif width=$espacement_entre_lettre height=$hauteur_de_lettre border=0>";
      }
   }
   return ("$images_retournees");
}

Voici le résultat en appelant la fonction transformer_en_images($chaine,4,8,"04b25") et sa zone sensible respective :



<- zone sensible

Et avec la fonction transformer_en_images($chaine,1,6,"silkscreen") et sa zone sensible respective :



<- zone sensible

Si vous avez sauvé chacune des images sur un fond transparent et sans bord autour des lettres, vous pouvez déjà :

  • d'une part utiliser une typo définie sur n'importe quelle couleur de fond.
  • d'autre part, choisir un espacement entre lettres compris entre 0 et plusieurs pixels.


  • De quoi réaliser plusieurs effets sympathiques sans nécessairement multiplier la quantité de travail par 10, le plus long étant de réaliser les planches.

    piregwan
    2437 visites




     

    queru, 17 10 2001 à 11:21

    "tit...tit... ESSAI ENCORE...tit...tit& quot;.
    Bon, d'accord, je m'y remets.
    C'est en faisant qu'on apprends.
    Merci pour ta réactivité, Mr. Piregwan.


    queru


    piregwan, 16 10 2001 à 14:46

    l'appel que tu fais à la fonction transformer... n'est pas correct : la fonction ne porte pas le meme nom ou ne contient pas le bon nombre d'arguments.

    a+


    piregwan (agent mad fana...)
    44 ans (chambéry, 73)
    krakoukas@piregwan-genesis...
    http://www.piregwan-gen...


    queru, 16 10 2001 à 14:11

    mmmouais ! en local, ça ne marche pas.
    [function transformer_en_image s($chaine) { $images_retournees= ""; // BOUCLE DE PARCOURS DE LA CHAINE for ($i=0;$i Fatal error: Call to undefined function: transformer_en_image s() in c:easyphpwww     e xtes2gif     ext2gif.ph p3 on line 4].
    Cela fait 1 plombe que je cherche sans résultat...

    domage, ça m'a l'air bien pratique.

    a+
    a+



    queru


    zamu, 10 10 2001 à 08:27

    Juste une question : on doit te citer si on utilise le script dans un site ?
    Merci beaucoup !


    zamu


    angel2k, 26 06 2001 à 08:47

    Arf .. et dire que moi pour ça j'avais fait x lignes avec des substr() !



    May the Force be with you, Gwan Jedi Master


    angel2k (exilé fanatiqu...)
    38 ans (Amiens)
    angel2k@piregwan.com


    okworld, 25 06 2001 à 21:59

    merci beaucoup beaucoup c coooooooll


    okworld (membre)
    43 ans
    okworld@free.fr
    http://www.gratispace.c...


    ( 12 commentaires )
    << 1 2 3 4 5 6 7 8 9 10 11 12 >>

     











    P I R E G W A N . C O M
    interface & développement - piregwan 1998-2002




    toutes les bannières


    généré en 0.075 secondes