Créer une image gif transparent contenant un texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 711 fois - Téléchargée 19 fois

Contenu du snippet

Le script suivant permet de créer une image GIF transparente avec un texte.
Cette fonction est très utile pour afficher des adresses mails non détectable pour les bots de spam.

Par rapport aux autres sources que j'ai pu trouver sur le sujet celle-ci a les avantages suivants :
- fond transparent pour une meilleure intégration à l'esthétique du site
- simplicité d'utilisation (adresse .php avec un argument GET)

Source / Exemple :


<?php 
/**************************************************************************

  • texteimage.php
  • Création d'une image gif transparent pour affichage d'un texte dans une image
  • Licence GPL (c)janvier 2008
  • Auteur : David Dorchies (dorch chez laposte . net)
  • Site internet : http://www.dorch.fr
  • Exemple d'utilisation :
  • Pour afficher une image à la place d'un texte dans une page web insérer
  • le code HTML suivant :
  • <img scr="texteimage.php?txt=jean.dupont@toto.com&fontsize=4">
  • NB : dans cet exemple le fichier texteimage.php doit se trouver dans le même
  • répertoire que la page HTML en question.
*
  • L'argument fontsize est facultatif et est réglé à 4 par défaut
  • L'argument base64 est facultatif et est réglé à 0 par défaut
  • base64=1 veut dire que txt est encodé en base64
  • Nécessite une librairie GD différente de la 1.6 (absence des fonctions GIF)
  • /
$err=''; if (!function_exists("ImageCreate")) $err='Erreur : Librairie GD non installée !'; if (!$err && !function_exists("imagegif")) $err='Mauvaise version de librairie GD : absence de la fonction imagegif'; if($err) { header('Content-Type: text/plain'); echo $err; return; } //Définition du texte $txt='no text'; if(isset($_GET['txt']) && $_GET['txt']!='') { $txt=html_entity_decode($_GET['txt']); } //définition de la taille $corp=4; if(isset($_GET['fontsize']) && $_GET['fontsize']!='') { $corp = $_GET['fontsize']; } if(isset($_GET['base64']) && $_GET['base64']==1) { $txt = base64_decode($txt); } $haut = $corp*4.5; //Hauteur de l'image à créer $larg = strlen($txt)*$haut/1.6; //Largeur de l'image à créer $img = imagecreate($larg, $haut); //Création de l'image $background_color = imagecolorallocate ($img, 0, 0, 0); $transparent_color = imagecolortransparent($img,$background_color); $noir = imagecolorallocate($img,0,0,0); imagestring($img, $corp,0,0, $txt,$noir); header("Content-type: image/gif"); imagegif($img); ?>

A voir également

Ajouter un commentaire

Commentaires

guill76
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

Pour la question des && dans une condition :
le pb est que si on met des else à traiter derriere un if ( a && b && ..&& ..)
on risque de se tordre les neurones dans tous les sens , c'est là le seul problème.
dorch
Messages postés
3
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2008

Pour répondre à MALALAM sur l'encodage Base64 servant à tromper les robots. Je suis d'accord avec toi pour dire que ce n'est pas folichon et en plus ça peut provoquer des erreurs car l'encodage en base 64 génère des "+" et des "/" qui génèrent des erreurs de paramètres dans l'URL.

Donc pour un bon cryptage, j'utiliserai plutôt les fonctions mcrypt suivi d'un encodage en base64 en remplaçant les "+" et les "/".
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
@Jan => tout dépendrait de la façon dont PHP traite les opérateurs de comparaison.
En l'occurence, avec un AND, PHP traite d'abord l'expression de gauche; si celle-ci est fausse, la 2de ne sera même pas traitée. Donc si l'ordre est isset($var) && $var === valeur, tout va bien. L'inverse lui provoquerait une erreur.
Exemple :
<?php
error_reporting(E_ALL);
if(isset($a) && $a === true) {
echo 'OK';
} else {
echo 'KO';
}

if( $a === true && isset($a)) {
echo 'OK';
} else {
echo 'KO';
}
?>
Ce code tel quel génèrera une erreur ligne 10, à savoir, sur la 2de condition, alors que la 1ère passe très bien.
En l'occurence il s'agit d'utiliser les spécs du langage.
Personnellement, je préfère une condition bien écrite que 2 conditions imbriquées. Mais ça reste une questiond e préférence de toute manière. Par contre, ça n'a rien de malsain ;-) C'est ainsi que fonctionne PHP, donc c'est parfaitement sain.
Mais si l'on a de très nombreuses expressions à mettre dans une condition, là il vaut mieux découper si l'on veut un code lisible.
Mais encore une fois, tout ça n'est qu'une question de préférence, c'est parfaitement subjectif.
jantosze
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009

OK avec toi sur le fait de réaliser un test directement sur base64==1 sans avoir vérifier l'esxitance de base64 est dangereux, parcontre laisser au parser de PHP le soin de gérer des test sous une condition de même niveau et dont l'un conditionne l'autre me semble pas sain. Dans ce cas je préférai écrire 2 tests distincts cela me semble plus simple en lecture et sa ne mange pas de "pain".
malalam
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
19
Hello,

@Jan => ces vérifications sont correctes. Faire
if(isset($var) && $var === 1)
revient très exactement à faire
if(isset($var)) {
if($var === 1)
}
sauf que dans le 1er cas, tu ne fais qu'une condition et que c'est nettement plus lisible.
"car par exemple si base64==1 est vrai alors forcement il existe"
Sauf que si base64 n'existe pas et que tu fais directement if($_GET['base64'] === 1)
tu auras une erreur. Alors qu'en faisant DANS l'ordre
f(isset($_GET['base64']) && $_GET['base64']===1)
tu testes d'abord sont existance, et donc ensuite peut tester sa valeur. Si cette variable n'existe pas, PHP n'ira même pas dans la deuxième condition et ne provoquera donc pas d'erreur.

Au passage, le base64 ne protège pas grand chose...ce n'est pas du cryptage, c'est de l'encodage. Vu que c'est réversible, un robot pas trop con trouvera sans problème le mail.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.