Captcha 3d iso & lecture de font console

Soyez le premier à donner votre avis sur cette source.

Vue 10 793 fois - Téléchargée 510 fois

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 / Exemple :


<?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

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
non, comme beaucoup de choses que j'ai faites et montres ici, je l'ai fait pour le defis, mais c'est un captcha assez peu accessible.
Messages postés
2
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
10 mars 2009

Bel objet mathématique. Répond-t-il aux besoins ?

J'ai de bons yeux donc pas de problèmes pour moi au niveau de la lisibilité de ton captcha 3D, dans la majorité des cas. Par contre, si l'on veut l'utiliser dans un site ouvert à tous, beaucoup n'arriveront pas à lire ce type de captcha (ou ne feront pas l'effort d'essayer la nouveauté). De plus, les mal-voyants ont besoin d'une version audio (on ne peut plus continuer à exclure les personnes différentes du web, entre autre).

C'est pourquoi je me demandais si tu avais testé le fameux reCAPTCHA de Carnegie Mellon University, version PHP. C'est une version avec un serveur dédié utilisant un couple (clef publique, clef privée). Le Défi image aide indirectement à numériser des livres (pour comprendre, lire http://recaptcha.net/) et le Défi audio existe en plusieurs langues, dont le français.

J'ai tout testé : du point de vu des fonctionnalités (réponses aux besoins), je n'ai pas (encore) trouvé mieux.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
J'avais fait à l'époque une traduction d'un blog sur divers tests sur les spams.

http://blog.reflectiv.net/2008/09/02/affichez-vos-emails-tout-en-evitant-le-spam/

Ceci est ma version, mais vous trouverez dans ce post le lien vers la version originale :)
Messages postés
7
Date d'inscription
mercredi 30 novembre 2005
Statut
Membre
Dernière intervention
4 décembre 2008

ok, je te remercie pour l'info, discussion interressante.

Bonne journée à vous
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
exactement

les robots floodeurs sont concus pour un formulaire bien precis, alors que les robots spammeurs se baladent et postent (parfois plusieurs fois sur la meme page d'ailleur...)
Afficher les 37 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.