edito
forum (21 051)
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 (342)
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
409 019 hits
 
 

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

tutos aléatoires
238 059 hits

 

 

screen fonts
brushes
softwares
 
 
 

 

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

2 134 894 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
    2144 visites




     

    piregwan, 16 02 2002 à 15:11

    > possibilité de concaténer
    > ces images en une seule
    > en utilisant la GD de PHP4 ?

    oui. génération de gif, jpeg, png a la volée. librairie non stable, en cours de dev.

    "PHP is not limited to creating just HTML output. It can also be used to create and manipulate image files in a variety of different image formats, including gif, png, jpg, wbmp, and xpm. Even more convenient, php can output image streams directly to a browser. You will need to compile PHP with the GD library of image functions for this to work. GD and PHP may also require other libraries, depending on which image formats you want to work with. GD stopped supporting Gif images in version 1.6."



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


    Qu_, 12 02 2002 à 11:26

    En fait, on obtiens des images collées les unes à coté des autres et non pas une seule et même image !?

    N'y a t-il pas possibilité de concaténer ces images en une seule en utilisant la GD de PHP4 ?


    Pour les gros nuls en prog comme moi, ça marche mieux quand...
    <? et ?> en début et fin de la fonction transformer_en_image( ).

    je mets des guillemets à $chaine et aux dimensions hauteur, largeur = transformer_en_images ("$chaine","4","8","0 4b25")

    Qu_


    Qu_ (minnie)
    (Nantes)
    qu_@hotmail.com


    Julien, 29 12 2001 à 22:50

    Pardon pardon mais je comprends pas très bien l'intérêt de ce tut.
    Est-ce que quelqu'un pourrait m'expliquer dans des termes simples le pkoi du comment.

    PS: En des termes simples pas que je sois bête (enfin pas sûr...) mais en ce moment j'ai tendance à me bourrer la gueule pour oublier mais ça marche pas en fait...


    Julien (mickey)
    41 ans (Lille)
    j_de_bruyne@infonie.fr


    queru, 21 10 2001 à 20:02

    Merci Nik, bien tenté ! Je m'en étais rendu compte, bien évidemment. Je sais ce que signifie déclarer une fonction et de l'appeler d'un autre endroit (j'ai une maigre expé de ASP et de javascript !
    Cela ne marche pas quand même. .
    ...probablement une mauvaise déclaration de rép. ou je ne sais pas quoi. ...Pas grâve, je vais revoir ça un peu plus tard.

    Merci quand même...


    queru


    niko, 17 10 2001 à 19:43

    query, je te donne une piste à suivre, comme t'as dit gwan, la fonction que tu appeles n'est pas defini, en fait une erreur c'est glisser dans le tuto. La fontion que tu appelles s'appelle transformer_en_image s(), jusque là t'es d'accord avec moi, or la fonction qui transformer le texte en image s'appelle transformer_en_lettr es(), donc tu vois où je veux en venir, hein. Quand tu fais un appel à la fonction transformer_en_image s(), comme tu ne l'a pas defini, une erreur apparaît et tout cela est bien normal. La solution est de renommer la definition de la fonction en transformer_en_image s(). En esperant, que tu es compris ce que j'ai essaye de te dire.


    niko (admin. exilé f...)
    39 ans (Reims)
    niko@piregwan.com
    http://summerefresh.pir...


    queru, 17 10 2001 à 11:37

    Je suis un peu bête et surtout ignare en développement. J'ai repris tel quel ton exemple. et cela ne marche pas...??! =:(


    queru


    ( 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.068 secondes