Afficher un code, un texte, sous la forme d'une image plus ou moins déformée (outil permettant de limiter le spam et de stop

Soyez le premier à donner votre avis sur cette source.

Vue 9 370 fois - Téléchargée 317 fois

Description

//==============================================================================
// D E S C R I P T I O N
//==============================================================================
//| |
//| FICHIER : CreateImageFromText.php |
//| |
//| OBJECTIF : écrit un texte sous une forme imagée et tordue paramétrable. |
//| |
//| Réalisé par BlueMan (http://www.blueman.name/me_contacter.php) |
//| |
//==============================================================================
//
// ATTENTION : pour fonctionner, ce script nécessite :
//
// la police TrueType "Seawawe Extended Keyset" : "Seawek.ttf"
// qui doit être placée dans le même répertoire que ce script.
//
// Les Paramètres sont CASE INSENSITIVE et leur ordre n'a aucune importance.
//
// Les Paramètres possibles en entrée sont :
//
//==============================================================================
//| | | OBLIGATOIRE |
//| PARAMÈTRE | ROLE | ou |
//| | | VALEUR PAR DÉFAUT |
//|============================================================================|
//| Text = Letexte | Le texte à transformer en image | Oui |
//|----------------------------------------------------------------------------|
//| Size = n | La taille de la police au sens | 20 |
//| | windows (8, 10, 12 , 14, etc.) | |
//|----------------------------------------------------------------------------|
//| Color = RRVVBB | La couleur des lettres en Hexa | 0000FF (bleu) |
//|----------------------------------------------------------------------------|
//| MaxAngle = a | Les caractères seront écrits | |
//| | avec un angle exprimé en degré | 20 |
//| | dans [-MaxAngle , +MAxAngle] | |
//-----------------------------------------------------------------------------|
//| BGColor = RRVVBB | La couleur de remplissage du | FFFFFF (blanc) |
//| | fond en Hexa | |
//|----------------------------------------------------------------------------|
//| Border = true|false | Avec ou sans cadre | true |
//|----------------------------------------------------------------------------|
//| BorderColor = RRVVBB | La couleur du cadre en Hexa | 000000 (noir) |
//|----------------------------------------------------------------------------|
//| Gutter = g | Le nombre de pixels de la | |
//| | gouttière séparant le texte de | 6 |
//| | la bordure. | |
//|----------------------------------------------------------------------------|
//| Quality = q | Un nombre dans [0,100] | |
//| | indiquant la qualité de | 40 |
//| | l'image JPEG. | |
//------------------------------------------------------------------------------
//
// Exemples de codes à placer dans votre source :
// ----------------------------------------------
//
// Exemple 1 : echo "<IMG src='CreateImageFromText.php?Text=ABCDE'>";
//
// Exemple 2 : echo "<IMG src='CreateImageFromText.php?Cadre=false&Text=ABCDE&MaxAngle=12&Color=FF0000' align='absmiddle'>";
//
// Exemples vivants :
// ------------------
//
// Exemple vivant 1 : http://www.blueman.name/me_contacter.php
//
// Exemple vivant 2 : http://www.blueman.name/Telechargement.php
//
// Exemple vivant 3 : http://www.agiradesainthubert.ca/ContactFr.php
//

Source / Exemple :


<?php
//==============================================================================
//                          D E S C R I P T I O N
//==============================================================================
//|                                                                            |
//| FICHIER : CreateImageFromText.php                                          |
//|                                                                            |
//| OBJECTIF : écrit un texte sous une forme imagée et tordue paramétrable.    |
//|                                                                            |
//|       Réalisé par BlueMan (http://www.blueman.name/me_contacter.php)       |
//|                                                                            |
//==============================================================================
//
// ATTENTION : pour fonctionner, ce script nécessite :
//
//      la police TrueType "Seawawe Extended Keyset" : "Seawek.ttf"
//      qui doit être placée dans le même répertoire que ce script. 
//
// Les Paramètres sont CASE INSENSITIVE et leur ordre n'a aucune importance.
//
// Les Paramètres possibles en entrée sont :
//
//==============================================================================
//|                      |                                 |    OBLIGATOIRE    |
//|      PARAMÈTRE       |             ROLE                |         ou        |
//|                      |                                 | VALEUR PAR DÉFAUT |
//|============================================================================|
//| Text = Letexte       | Le texte à transformer en image |        Oui        |
//|----------------------------------------------------------------------------|
//| Size = n             | La taille de la police au sens  |         20        |
//|                      | windows (8, 10, 12 , 14, etc.)  |                   |
//|----------------------------------------------------------------------------|
//| Color = RRVVBB       | La couleur des lettres en Hexa  |   0000FF (bleu)   |
//|----------------------------------------------------------------------------|
//| MaxAngle = a         | Les caractères seront écrits    |                   |
//|                      | avec un angle exprimé en degré  |        20         |
//|                      | dans [-MaxAngle , +MAxAngle]    |                   |
//-----------------------------------------------------------------------------|
//| BGColor = RRVVBB     | La couleur de remplissage du    |  FFFFFF (blanc)   |
//|                      | fond en Hexa                    |                   |
//|----------------------------------------------------------------------------|
//| Border = true|false  | Avec ou sans cadre              |        true       |
//|----------------------------------------------------------------------------|
//| BorderColor = RRVVBB | La couleur du cadre en Hexa     |  000000 (noir)    |
//|----------------------------------------------------------------------------|
//| Gutter = g           | Le nombre de pixels de la       |                   |
//|                      | gouttière séparant le texte de  |         6         |
//|                      | la bordure.                     |                   |
//|----------------------------------------------------------------------------|
//| Quality = q          | Un nombre dans [0,100]          |                   |
//|                      | indiquant la qualité de         |        40         |
//|                      | l'image JPEG.                   |                   |
//------------------------------------------------------------------------------
//
//               Exemples de codes à placer dans votre source :
//               ----------------------------------------------
//
// Exemple 1 : echo "<IMG src='CreateImageFromText.php?Text=ABCDE'>";
//
// Exemple 2 : echo "<IMG src='CreateImageFromText.php?Cadre=false&Text=ABCDE&MaxAngle=12&Color=FF0000' align='absmiddle'>";
//
//                             Exemples vivants :
//                             ------------------
//
// Exemple vivant 1 : http://www.blueman.name/me_contacter.php
//
// Exemple vivant 2 : http://www.blueman.name/Telechargement.php
//
// Exemple vivant 3 : http://www.agiradesainthubert.ca/ContactFr.php
//
//------------------------------------------------------------------------------
//                      I M P L É M E N T A T I O N
//------------------------------------------------------------------------------

// Définition du Header : obligatoire et obligatoirement le premier elément envoyé
// au navigateur
header("Content-type: image/jpeg");

// On rend case insensitive, pour le développeur, le nom des paramètres,
// ceci afin de limiter les erreurs idiotes engendrant des pertes de temps.
// On les transforme tous en MAJUSCULES
if (IsSet($_GET)) $_GET = array_change_key_case($_GET, CASE_UPPER);

// Récupération ou non des paramétres
// Le Texte
if ( IsSet($_GET['TEXT'])) {$Text = $_GET['TEXT'];} else {$Text = "";}

// Calcul du nombre de lettres
$NbLettres = StrLen($Text);
if ($NbLettres == 0) Exit;

// La Taille de la police du texte
if ( IsSet($_GET['SIZE']) and ($_GET['SIZE'] > 0)) { $TaillePolice = $_GET['SIZE'];}
else {$TaillePolice = 20;}

// La couleur des lettres à écrire
if ( IsSet($_GET['COLOR']))
{
  $Couleur = $_GET['COLOR'];
  $RougeLettres=IntVal(SubStr($Couleur,0,2),16);
  $VertLettres=IntVal(SubStr($Couleur,2,2),16);
  $BleuLettres=IntVal(SubStr($Couleur,4,2),16);
}
else {$RougeLettres=0; $VertLettres=0; $BleuLettres=255;}

// Les caractères seront écrits avec un angle exprimé en degré dans [-MaxAngle , +MAxAngle]
if ( IsSet($_GET['MAXANGLE']) and ($_GET['MAXANGLE'] >= 0)) {$MaxAngle = $_GET['MAXANGLE'];}
else {$MaxAngle = 20;}

// La couleur de fond
if ( IsSet($_GET['BGCOLOR']))
{
  $Couleur = $_GET['BGCOLOR'];
  $RougeFond=IntVal(SubStr($Couleur,0,2),16);
  $VertFond=IntVal(SubStr($Couleur,2,2),16);
  $BleuFond=IntVal(SubStr($Couleur,4,2),16);
}
else {$RougeFond=255; $VertFond=255; $BleuFond=255;}

// L'utilisateur veut-il un cadre ?
// On a utilisé strtolower afin de rendre case insensitive l'écriture des
// booléens destinés au paramètre CADRE
if ( IsSet($_GET['BORDER'])) {$IsCadre = !(strtolower($_GET['BORDER']) == "false");}
else {$IsCadre = true;}

// La couleur du cadre
if ($IsCadre and IsSet($_GET['BORDERCOLOR']))
{
  $Couleur = $_GET['BORDERCOLOR'];
  $RougeCadre=IntVal(SubStr($Couleur,0,2),16);
  $VertCadre=IntVal(SubStr($Couleur,2,2),16);
  $BleuCadre=IntVal(SubStr($Couleur,4,2),16);
}
else {$RougeCadre=0; $VertCadre=0; $BleuCadre=0;}

// La gouttière
if ( IsSet($_GET['GUTTER']) and ($_GET['GUTTER'] > -1)) {$Gutter = $_GET['GUTTER'];}
else {$Gutter = 6;}

// La qualité
if ( IsSet($_GET['QUALITY']) and ($_GET['QUALITY'] > -1)) {$Quality = $_GET['QUALITY'];}
else {$Quality = 40;}

// Calcul de la taille de l'image
// Cette police est particulièrement bien adaptée à cette tâche
$Font = "Seawek.ttf"; // Nom complet : Seawave Extended Keyset (TrueType)
$Hauteur = $TaillePolice;
$Pos = $Gutter;
$HauteurMax = 0;
for ($i=0; $i<$NbLettres; $i++)
{
  $Angle = rand(-$MaxAngle,$MaxAngle);
  $InfoRect= ImageTTFBbox($TaillePolice, $Angle, $Font, $Text[$i]);
  
  $LargeurCar1 = $InfoRect[2]-$InfoRect[6];
  $LargeurCar2 = $InfoRect[4]-$InfoRect[0];
  if ($LargeurCar1 > $LargeurCar2) {$LargeurCar = $LargeurCar1;} else {$LargeurCar = $LargeurCar2;}
  
  $HauteurCar1 = $InfoRect[1]-$InfoRect[5];
  $HauteurCar2 = $InfoRect[3]-$InfoRect[7];
  if ($HauteurCar1 > $HauteurCar2) {$HauteurCar = $HauteurCar1;} else {$HauteurCar = $HauteurCar2;}

  if ($HauteurCar > $HauteurMax) {$HauteurMax=$HauteurCar;}
  
  if ($InfoRect[6] > $InfoRect[0]) {$OffsetX = $InfoRect[0];} else {$OffsetX = $InfoRect[6];}
  if ($InfoRect[7] > $InfoRect[5]) {$OffsetY = $InfoRect[5];} else {$OffsetY = $InfoRect[7];}
  
  $aDatas[] = array($Pos, $Angle, $LargeurCar, $HauteurCar, $OffsetX, $OffsetY);
  $Pos = $Pos + $LargeurCar;
}
$Largeur = $Gutter + $Pos + $Gutter;
$Hauteur = $Gutter + $HauteurMax + $Gutter;

// Création de l'image
$Image = ImageCreateTrueColor($Largeur,$Hauteur);

// Création des couleurs
$CoulFond = ImageColorAllocate($Image, $RougeFond, $VertFond, $BleuFond);
$CoulLettres = ImageColorAllocate($Image, $RougeLettres, $VertLettres, $BleuLettres);
$CoulCadre = ImageColorAllocate($Image, $RougeCadre, $VertCadre, $BleuCadre);

// Remplissage du fond
ImageFilledRectangle($Image, 0, 0, $Largeur-1, $Hauteur-1, $CoulFond);

// Traçage du cadre si nécessaire
if ($IsCadre) {ImageRectangle($Image, 0, 0, $Largeur-1, $Hauteur-1, $CoulCadre);}

// Ajout du texte
$Pos = $Gutter;
for ($i=0; $i<$NbLettres; $i++)
{
  ImageTTFText($Image, $TaillePolice, $aDatas[$i][1], $Pos-$aDatas[$i][4], (($Hauteur - $aDatas[$i][3])/2)+$Gutter-$aDatas[$i][5], $CoulLettres, $Font, $Text[$i]);
  $Pos = $Pos + $aDatas[$i][2];
}

// Affichage de l'image
ImageJpeg($Image,NULL,$Quality);
ImageDestroy($Image);
//================================ END of FILE =================================
?>

Conclusion :


Voila une fonction puissante mais néanmoins facile à mettre enn oeuvre qui ravira tous les amateurs de sécurité.

Explorez bien les possibilités de la fonction en testant les nombreux paramètres !

Bonne utilisation,

BlueMan.
(http://www.blueman.name/me_contacter.php)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
29
franchement, j'ai du mal a croire que tu es expert en sécurité...

a++

PS : regarde le tuto de pysco, il ne peut que te faire du bien lol !
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
encore un problème d'informations à faire ne pas faire passer coté utilisateur..... encore une fois des sessions: http://www.phpsources.org/tutoriel-sessions.htm pour l'information...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
dans tes exemples, le code se trouve dans l'image, donc euh... ca ne sert a rien, ta protexion n'est pas plus efficace qu'un truc qui demande combien font deux plus deux.
Messages postés
2
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
13 juillet 2008

allons allons ...

il suffit juste de remplacer la ligne 86 :
if ( IsSet($_GET['TEXT'])) {$Text = $_GET['TEXT'];} else {$Text = "";}
par
if ( IsSet($_SESSION['TEXT'])) {$Text = $_SESSION['TEXT'];} else {$Text = "";}

que l'on défini au préalable dans le php ...
l'interêt de cette source : l'image en elle même, pas mal configurable et qui reste lisible pour d'autres utilisations ^^
Messages postés
64
Date d'inscription
mercredi 24 juillet 2002
Statut
Membre
Dernière intervention
26 novembre 2009

Comme l'on dit les autres, cette source est inutile dans l'état.
D'une, il faut ajouter les sessions pour que le texte de vérification reste sur le serveur. De plus il faut que ce soit généré aléatoirement.
De deux, le code dans la description, c'est un peu loupé comme texte. L'avoir là, peut indiquer que tu ne sais pas expliquer comment fonctionne ton code.

Cordialement.
Afficher les 11 commentaires

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.