|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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-ISOMETRIQUE_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
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
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
Sources en rapport avec celle ci
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 .
|
|