Accueil > > > CAPTCHA 3D ISO & LECTURE DE FONT CONSOLE
CAPTCHA 3D ISO & LECTURE DE FONT CONSOLE
Information sur la source
Description
ceci permet d'afficher un texte en relief sur une map en 3d iso (sur le principe des tilemaps mais sans tile) pour l'afficher, on utilise une police de fichier de console, ces polices ne sont pas tres difficiles a lire, les 4 premiers octets ne servent a rien, ensuite, un octet code une ligne d'un caractere (un bit a 1 dit qu'il y a un point) 8 octets codent un caractere. un conseil : le texte a placer ici doit-etre un mot parce-que sinon, la lisibilite sera mauvaise (l'exemple presente ici affiche des caracteres aleatoires et non un mot aleatoire) demo en ligne ici http://eelte.megami.fr/test.php explications supplementaires ici : http://eelte.megami.fr/ la meme source mais traduite en python ici : http://www.pythonfrance.com/codes/CAPTCHA-3D-ISOME TRIQUE_47676.aspx (elle n'est pas de moi.)
Source
- <?php
-
- define('PI', 3.141592754);
-
- function evoluer(&$val, $i){
- $val-=$i*2;
- }
-
- /**
- * @brief renvoie une matrice de hauteurs qui correspond a l'affichage de la chaine de caractere
- * @param $alphabet le contenu du fichier de font
- * @param $chaine la chaine a transposer
- * @param $h la hauteur du texte
- * @param $h2 la hauteur des ondes
- * @param $CANGLE l'angle des vagues
- * @param $CX le coef en X des vagues
- * @param $CY le coef en Y des vagues
- * @param $phy l'ajout dans les cos
- * @return int**
- **/
- function getmatrice($alphabet, $chaine, $h=5, $h2=3, $CANGLE=0.055, $CX=0.5, $CY=1, $phy=1){
-
- $limX=16*(strlen($chaine)+1);
-
- $a = array_fill(0, $limX, 0);
-
- // les deformation en vagues
- for ($k=0;$k<20;$k++){
- for ($i=0;$i<$limX;$i++){
- $array[$k][$i]=(
- cos(($i*$CY+$k*$CX*PI)*$CANGLE +$phy) *
- sin(($i*$CY+$k*$CX*PI)*$CANGLE +$phy)
- )*$h2*7;
- }
- }
-
- $l=strlen($chaine);
-
- for ($k=1;$k<=$l;$k++){
- for ($i=0;$i<8;$i++){
- for ($j=7;$j>=0;$j--){
- if (ord($alphabet[$i+4+ord($chaine[$k-1])*8]) & (1<<$j)){
- evoluer($array[$i*2+2][$k*16+9-$j*2], $h);
- evoluer($array[$i*2+3][$k*16+9-$j*2], $h);
- evoluer($array[$i*2+2][$k*16+10-$j*2], $h);
- evoluer($array[$i*2+3][$k*16+10-$j*2], $h);
-
- }
- }
- }
- }
- return $array;
- }
-
-
- function getColor($matrice, $couleur){
- return $couleur * (10-$matrice/3)/10;
- }
-
- /**
- * @brief affiche la matrice en 3d isometrique
- * @param $matrice la matrice a afficher
- * @param $image l'image dans laquelle on dessine
- * @param $couleur la couleur des trais
- * @param $white la couleur de fond
- * @param $a l'angle de vue du plan 3d iso
- * @param $dx le "scale" en abscisse
- * @param $dy le "scale" en ordonnee
- * @param $by le decalage en ordonnee
- */
- function iso3dmatrice($matrice, $image, $couleur, $white, $a, $dx=4, $dy=8, $by=10){
- $sinA=sin($a);
- $cosA=cos($a);
-
- $limx=count($matrice[0])-1;
- $limy=count($matrice)-1;
-
- for ($y=0;$y<$limy;$y++){
- for ($x=1;$x<$limx;$x++){
- $a=array(
- ($x+$y*$cosA)*$dx, $by+$matrice[$y][$x]+($y+$x*$sinA)*$dy,
- ($x+1+$y*$cosA)*$dx, $by+$matrice[$y+1][$x]+($y+1+$x*$sinA)*$dy,
- ($x+1+(1+$y)*$cosA)*$dx, $by+$matrice[$y+1][$x+1]+($y+1+($x+1)*$sinA)*$dy,
- ($x+(1+$y)*$cosA)*$dx, $by+$matrice[$y][$x+1]+($y+($x+1)*$sinA)*$dy
- );
- imagefilledpolygon(
- $image,
- $a,4, 0xffffff
- );
- imagepolygon(
- $image,
- $a,4, $couleur
- );
-
-
- }
- }
- }
-
- /**
- * @brief sert a avoir une chaine aleatoire
- * @return une chaine de 5 caracteres aleatoires
- */
- function randSTR(){
- $alphabet=strtoupper('bcdefghjklmnpqstuvwxyz');
- $out='';
- $l=strlen($alphabet)-1;
- for ($i=0;$i<5;$i++){
- $out.=$alphabet[mt_rand(0, $l)];
- }
- return $out;
- }
- $txt=randstr();
- $rand=mt_rand(0, 0x00FFFF);
-
- // VOUS DEVEZ INSERER ICI VOTRE CODE D'ENREGISTREMENT DE $txt et $rand EN SESSION.
-
- // on decompose rand en 6 rands ayant pour valeurs, des valeurs comprises entre 0 et 3 (sur 2 bits donc)
- $rand1=($rand & 0x000003); // ----0011 3
- $rand2=($rand & 0x00000C) >> 2 ; // ----1100 12 -> C
- $rand3=($rand & 0x000030) >> 4 ; // 0011----
- $rand4=($rand & 0x0000C0) >> 6 ; // 1100----
- $rand5=($rand & 0x000300) >> 8 ;
- $rand6=($rand & 0x000C00) >> 10;
-
-
- define ('DX', 63 * strlen($txt));
- define ('DY', 250);
-
-
-
- $img=imageCreateTrueColor(DX, DY);
- $white = imagecolorallocate($img, 255, 255, 255);
- imagecolortransparent($img, $white);
- $black = imagecolorallocate($img, 0, 0, 255);
-
- imagefilledrectangle($img, 0, 0, DX, DY, $white);
-
-
- $alphabet=file_get_contents('alt-8x8.psf');
- if (isset($rand))
- $matrice=getmatrice($alphabet, $txt, 3+5/($rand1+1), ($rand2+2), $CANGLE=0.1/($rand3/3+3), ($rand4+3)/5, ($rand5+10)/6, PI*2/($rand1+1));
- else{
- $matrice=getmatrice($alphabet, $txt);
- $rand1=1;
- }
-
- iso3dmatrice($matrice, $img, $black, $white, PI/200*($rand1+2),3,5,20);
-
- if (isset($_GET['resizeX']) && isset($_GET['resizeY'])){
- $b=imageCreateTrueColor($_GET['resizeX'], $_GET['resizeY']);
- $white = imagecolorallocate($b, 255, 255, 255);
- imagecolortransparent($b, $white);
- imagefilledrectangle($b, 0, 0, $_GET['resizeX'], $_GET['resizeY'], $white);
- imageCopyResized($b, $img, 0, 0, 0, 0, $_GET['resizeX'], $_GET['resizeY'], DX, DY);
- $img=$b;
- }
-
- header('content-type:image/png');
- imagepng($img);
-
- ?>
<?php
define('PI', 3.141592754);
function evoluer(&$val, $i){
$val-=$i*2;
}
/**
* @brief renvoie une matrice de hauteurs qui correspond a l'affichage de la chaine de caractere
* @param $alphabet le contenu du fichier de font
* @param $chaine la chaine a transposer
* @param $h la hauteur du texte
* @param $h2 la hauteur des ondes
* @param $CANGLE l'angle des vagues
* @param $CX le coef en X des vagues
* @param $CY le coef en Y des vagues
* @param $phy l'ajout dans les cos
* @return int**
**/
function getmatrice($alphabet, $chaine, $h=5, $h2=3, $CANGLE=0.055, $CX=0.5, $CY=1, $phy=1){
$limX=16*(strlen($chaine)+1);
$a = array_fill(0, $limX, 0);
// les deformation en vagues
for ($k=0;$k<20;$k++){
for ($i=0;$i<$limX;$i++){
$array[$k][$i]=(
cos(($i*$CY+$k*$CX*PI)*$CANGLE +$phy) *
sin(($i*$CY+$k*$CX*PI)*$CANGLE +$phy)
)*$h2*7;
}
}
$l=strlen($chaine);
for ($k=1;$k<=$l;$k++){
for ($i=0;$i<8;$i++){
for ($j=7;$j>=0;$j--){
if (ord($alphabet[$i+4+ord($chaine[$k-1])*8]) & (1<<$j)){
evoluer($array[$i*2+2][$k*16+9-$j*2], $h);
evoluer($array[$i*2+3][$k*16+9-$j*2], $h);
evoluer($array[$i*2+2][$k*16+10-$j*2], $h);
evoluer($array[$i*2+3][$k*16+10-$j*2], $h);
}
}
}
}
return $array;
}
function getColor($matrice, $couleur){
return $couleur * (10-$matrice/3)/10;
}
/**
* @brief affiche la matrice en 3d isometrique
* @param $matrice la matrice a afficher
* @param $image l'image dans laquelle on dessine
* @param $couleur la couleur des trais
* @param $white la couleur de fond
* @param $a l'angle de vue du plan 3d iso
* @param $dx le "scale" en abscisse
* @param $dy le "scale" en ordonnee
* @param $by le decalage en ordonnee
*/
function iso3dmatrice($matrice, $image, $couleur, $white, $a, $dx=4, $dy=8, $by=10){
$sinA=sin($a);
$cosA=cos($a);
$limx=count($matrice[0])-1;
$limy=count($matrice)-1;
for ($y=0;$y<$limy;$y++){
for ($x=1;$x<$limx;$x++){
$a=array(
($x+$y*$cosA)*$dx, $by+$matrice[$y][$x]+($y+$x*$sinA)*$dy,
($x+1+$y*$cosA)*$dx, $by+$matrice[$y+1][$x]+($y+1+$x*$sinA)*$dy,
($x+1+(1+$y)*$cosA)*$dx, $by+$matrice[$y+1][$x+1]+($y+1+($x+1)*$sinA)*$dy,
($x+(1+$y)*$cosA)*$dx, $by+$matrice[$y][$x+1]+($y+($x+1)*$sinA)*$dy
);
imagefilledpolygon(
$image,
$a,4, 0xffffff
);
imagepolygon(
$image,
$a,4, $couleur
);
}
}
}
/**
* @brief sert a avoir une chaine aleatoire
* @return une chaine de 5 caracteres aleatoires
*/
function randSTR(){
$alphabet=strtoupper('bcdefghjklmnpqstuvwxyz');
$out='';
$l=strlen($alphabet)-1;
for ($i=0;$i<5;$i++){
$out.=$alphabet[mt_rand(0, $l)];
}
return $out;
}
$txt=randstr();
$rand=mt_rand(0, 0x00FFFF);
// VOUS DEVEZ INSERER ICI VOTRE CODE D'ENREGISTREMENT DE $txt et $rand EN SESSION.
// on decompose rand en 6 rands ayant pour valeurs, des valeurs comprises entre 0 et 3 (sur 2 bits donc)
$rand1=($rand & 0x000003); // ----0011 3
$rand2=($rand & 0x00000C) >> 2 ; // ----1100 12 -> C
$rand3=($rand & 0x000030) >> 4 ; // 0011----
$rand4=($rand & 0x0000C0) >> 6 ; // 1100----
$rand5=($rand & 0x000300) >> 8 ;
$rand6=($rand & 0x000C00) >> 10;
define ('DX', 63 * strlen($txt));
define ('DY', 250);
$img=imageCreateTrueColor(DX, DY);
$white = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $white);
$black = imagecolorallocate($img, 0, 0, 255);
imagefilledrectangle($img, 0, 0, DX, DY, $white);
$alphabet=file_get_contents('alt-8x8.psf');
if (isset($rand))
$matrice=getmatrice($alphabet, $txt, 3+5/($rand1+1), ($rand2+2), $CANGLE=0.1/($rand3/3+3), ($rand4+3)/5, ($rand5+10)/6, PI*2/($rand1+1));
else{
$matrice=getmatrice($alphabet, $txt);
$rand1=1;
}
iso3dmatrice($matrice, $img, $black, $white, PI/200*($rand1+2),3,5,20);
if (isset($_GET['resizeX']) && isset($_GET['resizeY'])){
$b=imageCreateTrueColor($_GET['resizeX'], $_GET['resizeY']);
$white = imagecolorallocate($b, 255, 255, 255);
imagecolortransparent($b, $white);
imagefilledrectangle($b, 0, 0, $_GET['resizeX'], $_GET['resizeY'], $white);
imageCopyResized($b, $img, 0, 0, 0, 0, $_GET['resizeX'], $_GET['resizeY'], DX, DY);
$img=$b;
}
header('content-type:image/png');
imagepng($img);
?>
Conclusion
l'accessibilite est reduite car certaines personnes ne peuvent pas lire les reliefs
Historique
- 14 décembre 2007 21:48:24 :
- corrections, et ameliorations en tout genre
- 29 mars 2008 16:10:37 :
- amelioration de la lisibilite, de la securite, correction d'une erreur dans la formule de 3d iso (j'avais un +1 qui n'etait pas dans une parenthese et qui aurait du, ca decalait le haut de toutes les lignes de quelques pixels, ca ne se voyait pas beaucoup, mais ca diminuait la lisibilite un petit peu), ajout des imagepolygones, ce qui annule la superposition de cases (les bots ne peuvent pas calculer une "densite" de bleu pour avoir des indices)
- 15 mai 2008 20:12:45 :
- ameliorations diverses
- 20 août 2008 17:20:58 :
- lien vers la source en python
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Salut à tous ! [ par Houzefa ]
Ouf j'ai enfin trouvé un moyen de poster dans ce nouveau forum ! ... au fait félicitations à Nix car l'interprétation des crochets dans les codes ne p
verification de fichier jpeg entiers [ par kaitennage ]
bonjourJ'utilise un script php qui lit une directory de fichiers jpegpour creer 2 composant une mini et une visu puis extrait des metas data-iptc le
Mail et anti-spam? [ par Varod ]
Bonjour tout le monde,Dans une application de sondage en ligne, j'utilises la fonction mail pr envoyer un lien vers le site ou est hebergé mon applica
probleme de conditions [ par popy01970 ]
Bonjour a tous je suis en train de faire un script genre pick 3 (quotidienne 3 pour les gens du quebec) j'ai un probleme dans la section des verific
Verification avan création d'un compte utilisateur !! [ par Ondine86 ]
Bonjours tout le monde, je debute dans le php, et je voudrai savoir si de gentil gens qui si connaise comme vous voudrai bien aider la pauvre petite O
Formulaire avec verification dynamique [ par bladebo ]
BonjourVoila j'aimerai savoir comment faire pour vérifier un formulaire et faire un affichage qui se modifie si certaines zones du formulaire ne sont
un formulaire qui ne passe pas les filtres anti-spam [ par frabern ]
Dans un formulaire, j'ai ce message de validation que je fais parvenir aux usagers pour confirmer l'ajout d'anniversaire.Le problème est le suiva
formulaire verification [ par johnmichel57 ]
bonjour, encore moi desole....Voila, j'ai mon formulaire, quand je clique sur envoi il y a verification, tout marche correct, mais si il y a un champ
Spam [ par SA7BOOCH ]
Bonjour à tous G un petit probléme avec ma newsletter : lorsque j'envoi les emils aux inscrit mes messages sont consid&
spam [ par simon0000 ]
salut pk quand j'envois un message de free.fr il est toujour considerer comme spam et est ce que il ya un moyen pour eviter ca .
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GOOGLE MAPGOOGLE MAP par fatmanajjar
Cliquez pour lire la suite par fatmanajjar
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|