begin process at 2012 02 05 02:57:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > GÉNÉRATION AUTOMATIQUE DE BOUTON

GÉNÉRATION AUTOMATIQUE DE BOUTON


 Information sur la source

Note :
9,13 / 10 - par 15 personnes
9,13 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :boutons, images, générer, gd, automatiquement Niveau :Débutant Date de création :01/06/2006 Date de mise à jour :02/06/2006 02:47:55 Vu / téléchargé :6 587 / 856

Auteur : Franquito

Ecrire un message privé
Site perso
Commentaire sur cette source (34)
Ajouter un commentaire et/ou une note

 Description

Voici une petite classe qui génère automatiquement des boutons (image au format png) avec un motif et un texte. Le bouton est créé selon les contraintes graphiques pré-établies c'est à dire les 2 extrémités gauche et droite et un fond en png.

Un schéma explique mieux que des mots : http://www.franquito.net/tutos/bouton.php

C'est un classe qui peut s'avérer trés utile quand vous développez un site du style e-commerce et que vous avez la flemme de faire une 20aine de boutons à la main. Du reste, si votre site à plusieurs themes, c'est autant de temps de gagner !

Source

  • <?php
  • # //
  • # // Boutons (juin 2006)
  • # // Franck Maurin
  • # // from Franquito.net
  • # // http://www.franquito.net/tutos/bouton.php
  • # //
  • Class Bouton
  • {
  • var $dessin;
  • var $alt;
  • var $hauteur;
  • var $largeur;
  • var $nom;
  • function Bouton($dessin, $alt)
  • {
  • $rep = "img/btn/"; //repertoire ou se trouve les boutons
  • $this->dessin = $dessin;
  • $this->alt = $alt;
  • $this->nom = $rep.'btn_'.substr($this->dessin, 0, 3).'_'.$this->formater($this->alt).'.png';
  • if(is_file($this->nom)) // Si le bouton existe déja, on renvoie les dimensions
  • {
  • $taille=getimagesize($this->nom);
  • $this->largeur = $taille[0];
  • $this->hauteur = $taille[1];
  • }
  • else // Sinon on va le créer
  • {
  • // Utilisation des ressources graphiques
  • $fond=$rep.'fond.png';
  • $taille_fond=getimagesize($fond);
  • $img_fond = ImageCreateFromPng ($fond);
  • $gauche=$rep.'gauche.png';
  • $taille_gauche=getimagesize($gauche);
  • $img_gauche = ImageCreateFromPng ($gauche);
  • $droite=$rep.'droite.png';
  • $taille_droite=getimagesize($droite);
  • $img_droite = ImageCreateFromPng ($droite);
  • $motif=$rep.''.$this->dessin.'.png';
  • $taille_motif=getimagesize($motif);
  • $img_motif = ImageCreateFromPng ($motif);
  • // Paramêtres du bouton
  • $this->hauteur = $taille_fond[1];
  • $this->largeur = $taille_gauche[0] + $taille_motif[0] + (strlen($this->alt)+1)*imagefontwidth(3) + $taille_droite[0];
  • // Création de l'image vierge
  • $img = imageCreate($this->largeur,$this->hauteur);
  • $couleur = ImageColorAllocate ($img, 100, 100, 100);
  • // Elémente graphiques du bouton
  • @imageCopyMerge($img, $img_fond, 0, 0, 0, 0, $this->largeur, $this->hauteur, 100);
  • @imageCopyMerge($img, $img_gauche, 0, 0, 0, 0, $taille_gauche[0], $taille_gauche[1], 100);
  • @imageCopyMerge($img, $img_droite, $this->largeur-$taille_droite[0], 0, 0, 0, $taille_droite[0], $taille_droite[1], 100);
  • @imageCopyMerge($img, $img_motif, $taille_gauche[0], ($this->hauteur-$taille_motif[1])/2, 0, 0, $taille_motif[0], $taille_motif[1], 100);
  • // Texte
  • imageString($img,3,$taille_gauche[0]+$taille_motif[0],($this->hauteur-imagefontheight(3))/2,' '.stripslashes(trim($this->alt)),$couleur);
  • //Création du bouton de type btn_[motif]_[alt].png
  • Imagepng ($img,$this->nom);
  • }
  • }
  • function formater($txt)
  • {
  • $a = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ@!?.:/ ";
  • $b = "aaaaaaooooooeeeeciiiiuuuuyn_______";
  • return (strtolower(strtr($txt, $a, $b)));
  • }
  • }
  • ?>
<?php
# //
# // Boutons (juin 2006)
# // Franck Maurin
# // from Franquito.net
# // http://www.franquito.net/tutos/bouton.php
# //
Class Bouton
	{
	var $dessin;
	var $alt;
	var $hauteur;
	var $largeur;
	var $nom;

	function Bouton($dessin, $alt)
		{
		$rep = "img/btn/"; //repertoire ou se trouve les boutons

		$this->dessin = $dessin;
		$this->alt = $alt;
		$this->nom = $rep.'btn_'.substr($this->dessin, 0, 3).'_'.$this->formater($this->alt).'.png';

		if(is_file($this->nom))	// Si le bouton existe déja, on renvoie les dimensions
			{
			$taille=getimagesize($this->nom);
			$this->largeur = $taille[0];
			$this->hauteur = $taille[1];
			}
		else // Sinon on va le créer
			{
			// Utilisation des ressources graphiques
			$fond=$rep.'fond.png';
			$taille_fond=getimagesize($fond);
			$img_fond = ImageCreateFromPng ($fond);

			$gauche=$rep.'gauche.png';
			$taille_gauche=getimagesize($gauche);
			$img_gauche = ImageCreateFromPng ($gauche);

			$droite=$rep.'droite.png';
			$taille_droite=getimagesize($droite);
			$img_droite = ImageCreateFromPng ($droite);

			$motif=$rep.''.$this->dessin.'.png';
			$taille_motif=getimagesize($motif);
			$img_motif = ImageCreateFromPng ($motif);

			// Paramêtres du bouton
			$this->hauteur = $taille_fond[1];
			$this->largeur = $taille_gauche[0] + $taille_motif[0] + (strlen($this->alt)+1)*imagefontwidth(3) + $taille_droite[0];

			// Création de l'image vierge
			$img = imageCreate($this->largeur,$this->hauteur);
			$couleur = ImageColorAllocate ($img, 100, 100, 100);  

			// Elémente graphiques du bouton
			@imageCopyMerge($img, $img_fond, 0, 0, 0, 0, $this->largeur, $this->hauteur, 100);
			@imageCopyMerge($img, $img_gauche, 0, 0, 0, 0, $taille_gauche[0], $taille_gauche[1], 100);
			@imageCopyMerge($img, $img_droite, $this->largeur-$taille_droite[0], 0, 0, 0, $taille_droite[0], $taille_droite[1], 100);
			@imageCopyMerge($img, $img_motif, $taille_gauche[0], ($this->hauteur-$taille_motif[1])/2, 0, 0, $taille_motif[0], $taille_motif[1], 100);

			// Texte
			imageString($img,3,$taille_gauche[0]+$taille_motif[0],($this->hauteur-imagefontheight(3))/2,' '.stripslashes(trim($this->alt)),$couleur);

			//Création du bouton de type btn_[motif]_[alt].png
			Imagepng ($img,$this->nom);
			}
		}

	function formater($txt)
		{
	    $a = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ@!?.:/ ";
		$b = "aaaaaaooooooeeeeciiiiuuuuyn_______";
		return (strtolower(strtr($txt, $a, $b)));
		}
	}

?>

 Conclusion

Exemple d'utilisation :

include('classes/bouton.classe.php');
$bouton = new Bouton($dessin,$texte);
echo '<img src="'.$bouton->nom.'" height="'.$bouton->hauteur.'" width="'.$bouton->largeur.'" alt="'.$bouton->alt.'" />';

Démo visible : http://www.franquito.net/tutos/bouton.php

Ce sont mes débuts en POO avec php, donc n'hésitez pas à critiquer ma classe, cela ne peut que me faire progresser !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 juin 2006 17:21:29 :
Ajout du .zip
02 juin 2006 02:47:56 :
Quelques modifications suites aux remarques de Wizard512 : Création d'un motif "enveloppe" et ajout des éléments @ : / et . dans le masque pour permettre le nommage du bouton. Enfin, pour ne pas surcharger le serveur, j'ai ajouter un test qui vérifie si l'image existe déja ou non. Cela dit, comme les élements comme @ . ? ! : et ' ' sont traduit pas le meme élément ('_') il se peut que si vous demander le bouton "Des question !" vous ayez le bouton "Des questions ?" ! De même pour les accents, donc il faut veiller à ce que l'orthographe soit le bon dés le début :p Si vous utiliser cette classe en local, ou que les ressources serveur ne vous effraie pas, supprimer tout simplement cette condition if(is_file())

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj
CRÉER UNE IMAGE À PARTIR DU TEXTE par dilar
UPLOAD IMAGE AVEC MINIATURE par dilar
Source avec Zip Source avec une capture MY.PICS : TRAITEMENT D'IMAGES NON DESTRUCTIF par inwebo
Source avec une capture IMAGES GENETIQUES par coucou747

Commentaires et avis

Commentaire de BlackWizzard le 01/06/2006 16:52:48 administrateur CS

où se trouvent les png requis?
genre fond.png

Commentaire de Franquito le 01/06/2006 17:13:02

ils se trouvent dans $rep à savoir ./img/btn/

Peut être devrais je les mettre dans un zip avec la classe ?

Commentaire de Andrei2006 le 01/06/2006 17:43:41

Il te faut GD pour ça non ?
Domage, mon hébergeur ne gère pas la bibliothèque GD :(

Commentaire de Franquito le 01/06/2006 17:49:22

Oui il faut GD. Cela dit, cela peut trés bien être un script qui tourne seulement en local pour generer et sauvegarder tout ses boutons avant de les ftp.

C'est un gain de temps par rapport à toshop ou gimp =)

Commentaire de mickaelpfr le 01/06/2006 18:00:43

class propre et simple, corectement commenté ... j'ai noté 9

Commentaire de tazmania37 le 01/06/2006 18:31:57

Génial, j'ai mis 10 !

Commentaire de wizard512 le 01/06/2006 20:39:26

quel belle source :)
que sa soit au niveau de la source ou au niveau du résultat ( image générer )
La class de la source est bien concu et l'image est belle....
Bref pour moi sa sera un 10/10 plus des félicitations   ;)

Commentaire de wizard512 le 01/06/2006 21:55:16

Je viens à peine d'y penser mais ta source peut aussi permettre
de protéger contre le spam. Enfin, je pense.
On peut s'en servire pour créer des images contenant des adresses mail, et
ainsi ça pourrait être un bon moyen contre le spam, non ?

Bref ta source peut avoir des utilisations multiples ( enfin pour moi ^^' )

Commentaire de wizard512 le 01/06/2006 22:03:27

Désolé de revenir à la charge   ^^'   mais je viens de m'apercevoir
que ton script ne gère pas certains caractères ( pour la création de l'image )

Bref il faudrait mieux remplacer les caractères qui empêchent la création
de l'image ( avec un str_replace(); ça le ferait je crois )
Car par exemple il ne marche pas avec la date
( oui je sais je suis chiant  ^^' )
Ex.:
        '22:00 31/05/2006' me revoie l'erreur suivante :
    
Warning: imagepng(): Unable to open 'img/btn/btn_sup_22:00_31/05/2006.png' for writing in \***\****\****\**\bouton.classe.php on line 59

( Encore désolé   ^^'  )

Commentaire de Franquito le 02/06/2006 01:03:08

Effectivement, seulement quand j'ai concu cette classe, ce n'était que pour la création de boutons et donc je n'ai pas imaginé de texte alternatifs avec ":" ou bien "/".

Pour contourner ce probleme, tu peux ajouter ces caractere dans la variable $a de la fonction formateret ajouter 2 "_" dans $b ! :)

Mais il est vrai que cela peut permettre de creer des adresses email, avec un petit dessins mail, ca peut le faire wi !!! ;) mais dans ce cas la, il fait remplacer les caractere "@" et "." de la meme maniere qu'au dessus.

Bon, je vais arranger tout ca :D

Commentaire de Franquito le 02/06/2006 01:15:16

On m'a aussi fait remarquer trés justement que php GD est tres friand en ressources serveur, et donc l'utilisation systématique de cette classe peut être lourd.

C'est pourquoi je parlais d'une utilisation offline, juste pour créer les boutons et les sauvegarder...

Mais peut etre qu'on pourrait aller plus loin. En effet, je pourrais ajouter un test dans ma classe qui verifierai si l'image existe déja ou non dans le repertoire /btn/. S'il existe deja, je n'ai qu'a retourner les parametre $hauteur, $largeur et $nom de l'image en question. Si l'image n'existe pas, alors que je la crée (ce sera la seule et unique fois).

Bref dés que j'ai le temps, je l'améliore =)

Commentaire de Franquito le 02/06/2006 02:49:35

Voila la classe est améliorée ! ;)

Commentaire de Naixn le 02/06/2006 08:20:28

Très sympa, simple et efficace :)

Commentaire de garfield90 le 02/06/2006 09:31:19

Apparement, il y a des problemes lors de la génération d'un image avec un text long

Sinon le code semble correct

Commentaire de Franquito le 02/06/2006 09:47:45

Effectivement, le problême vien que mon image fond.png ne dépasse pas 200px de largeur, donc si le texte est trop long il y aura du blanc.

Bon je pourrai agrandire l'image png, mais j'en profite pour vous demandez s'il n'y a pas un moyen de l'étirer plutot ??? comme ca je reduirait mon image fond.png a 1px de l'argeur !

Commentaire de Franquito le 02/06/2006 09:48:52

Désolé pour l'orthographe, j'ai du mal le matin :/

Commentaire de kool76 le 02/06/2006 09:59:25

Pas mal du tout :)

Commentaire de mickaelpfr le 02/06/2006 10:25:39

ce que tu peux faire , c'est détecter la taille de la string en px , puis coller l'image de fond de 200px , sur toute la longueur ( via une boucle .... ) et finir par les 2 bords :)
si tu as besoins d'aide , n'hésite pas.


Commentaire de babid le 02/06/2006 10:26:53

Exactement ce qu'il me fallait !! Merci

Très bon code, bonne continuation.

9/10

Commentaire de Franquito le 02/06/2006 10:36:14

Salut mickael ! :)

C'est un peu ce que je fait déjà dans ma classe, la largeur du bouton se fait en fonction de la largeur de la boucle, + les bords et le motif.

Mais j'aimerais utiliser un fond qui fait seulement 1 px, ce sera plus optimisé. Et au vu de la récente source "avancement de projet" avec le dégradé qui s'étire, je suis sur que cela doit être possible :)

Commentaire de mickaelpfr le 02/06/2006 11:25:10

Yop salut :)
Je te conseille d'utiliser plutot une image de fond de 200px ( ou un peu plus petit ) mais pas 1px , car il te faudra faire une boucle pour parcourir toute l'image pour la remplir ( il n'existe pas de fonction spécifique en php pour remplir une image avec une image de fond :( )

Donc avec une image de fond de 200px pour une image généré de 500px, tu ne fera une boucle que de 3 fois et non 500 ==> optimisation du temps et ressource serveur.

Commentaire de wizard512 le 02/06/2006 11:36:25

Peut être vérifier l'existance du dossier cible non ?   ^^'
Avec une petite fonction. Genre :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  function Is_dir_V( $DIR , $MODE )
  {
    if( is_dir( $DIR ) )
    {
      return true;
    }
     else
    {
      if( empty( $MODE ) )
      {
        $MODE = '0777';
      }

      if( @mkdir( $DIR , $MODE ) )
      {
         return Is_dir_V( $DIR , $MODE );
      }
        elseif( function_exists( 'system' ) )
      {
           @system( 'mkdir ' . $DIR . ' ' . $MODE );
           return Is_dir_V( $DIR , $MODE );
      }
        else
      {
         return false;
      }
    }
  }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


non ?     ¤¤'

Commentaire de Franquito le 02/06/2006 12:24:29

salut wiz !

Enfait je ne vois pas l'interet de ta fonction dans la mesure ou il suffit de bien ciblé le dossier à la base. Ta fonction va alourdir cette classe qui n'a pas besoin de cela tant la GD est deja friande en ressource.

Commentaire de johann1 le 02/06/2006 17:03:08

Franquito,

Ton lien d'exemple est brisé: http://www.franquito.net/tutos/bouton.php

Commentaire de Franquito le 02/06/2006 18:48:21

bizarre, il fonctionne bien chez moi :s

Commentaire de guismo1er le 07/06/2006 19:20:20

Excellent, je viens de tester, et c'est vraiment bien fait, un petit truc, contree le spam, c'est btn_env_xx_hotmail_com.png en exemple.

faudrait pas mettre autre chose, ou est  ce que les robots lisent meme dans les images?

Ciao

Commentaire de Franquito le 08/06/2006 12:08:30

il semblerait que les robots lisent dans les images :/

Ceci dit ce n'est pas le but premier de cette classe :)

Commentaire de kiki2sirom le 27/06/2006 16:22:10

ok chui un peu à la bourre dans les avis, mais là c du bon !!
kiki

Commentaire de chankalan le 11/07/2006 17:54:50

super, ça marche du tonnerre... y'a pas moyen de choisir la typo ?
10/10

Commentaire de steven777 le 14/09/2006 17:07:39

super, mais peut-on remplacer le fond (png) par une couleur toute bete (pour faire des boutons bleus, jaunes, verts...) ?
Aussi, peut-on ne pas mettre d'icone sur le bouton ?
Enfin, peut-on regler la taille du bouton ?

Commentaire de wbarbry le 14/12/2006 16:10:37

Super source !!!!!!!
si le bouton (image de fond) n'est pas blanc, la petite icone apparait sur un carré blanc. N'y a t'il pas moyen de se servir de la transparence des fichiers png?
Même souci avec bouton sur un fond de couleur autre que blanc...


Merci d'avance

William

Commentaire de Franquito le 23/12/2006 22:25:31

Salut les gars :)

Il ne tiens qu'à vous de changer les png, et de modifier les parametres de taille dans la classe.

Commentaire de neo8310 le 04/10/2007 20:43:21

Super ! Bon boulot et présentation propre (ca change des pages en vrac )

Commentaire de bobatheboss le 24/06/2008 18:25:32 10/10

Plus d'un an après, source toujours d'actualité et franchement parfaite !

Je génère des tas de png à la volé, rien à dire à part bravo !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

générer des miniatures avec gd 1.6 [ par vegetaline ] muhaha alors là c'est rigolo, un super défi pour les programmeurs fous!ok j'ai le code pour générer des miniatures grâce au php, mais ça marche qu'ave Pb de boutons ;) [ par Philenain1 ] Lut a tous ,bon ben voila je suis en train de me faire un forum et j'utilise des images comme des boutons grace à:onClick=\"javascript:location.href=' [BLOB->GD] Redimensionner un "flux image binaire"... [ par arnal69130 ] Bonjour &#224; tous,Je cherche &#224; faire une page pour afficher la carte d'identit&#233; d'un "agent", pour simplifier disons juste son nom et sa p comment redimensionner à la volée des images grâce à la lib GD ??? [TITRE MODERE CAR BOURRE DE FAUTES] [ par fredericmaill ] Bonjour, j'aimerais savoir comment redimention&#233; a la voll&#233; des images, donc j'aimerais savoir quelle fonction de la lib gd utiilis&#233; !! générer un lien automatiquement [ par satellite34 ] salut,je voudrais savoir un truc :j'ai un forum, comment faire un lien lorsque l'utilisateur a écris http://, automatiquement, si possible en utilisan Les boutons images [ par raven44 ] Bonjour &#224; tous, J'ai un petit probl&#232;me avec un bouton image, naturellement il faut savoir que le bouton image joue le role de submit mais o redimmensionner des images ... [ par loupile ] Bonjour, je vous explique sur mon site j'affiche des images hebergées sur des serveurs distants ... donc pas sur le mien :-) je voudrais pouvoir rédui Générer automatiquement aide html [ par boromsikim ] Bonjour,J'aurai souhaité mettre en ligne mes diverses documentations, et les présenter sous forme d'aide, un peu comme des fichiers *.chm, avec possib Php et les images [ par SeNeO64 ] Bonjour tout le monde.J'aurais voulu savoir s'il existait d'autre librairie que GD permettant de traiter des images.J'ai un script permettant de redim Pb avec la lib GD [ par quentin2b ] Bonjour a tous,Je cherchais un petit script pour protéger des images sur un de mes sites masi voila je rencontre un pb avec le code sources que j'ai t


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,746 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales