Como explicado no artigo anterior relativo à criação de um script que gera CAPTCHA's complexos uma maneira de aumentar a eficiência desse código era utilizar a função imagettftext do PHP. Para tal basta acrescentar as seguintes linhas de código no início do script:
# Criar array com os ficheiros ttf
$dir_local = 'ttf/';
$fontes = array();
$dir = opendir($dir_local);
while($ficheiro = readdir($dir)) {
if (substr($ficheiro, -4, 4) == ".ttf")
$fontes[] = $ficheiro;
}
$fontes_size = count($fontes)-1;
O que estas linhas fazem é escrever num array ($fontes) um conjunto de caminhos relativos para ficheiros .ttf que irão ser usados pela função imagettftext. Onde a variável $dir_local contém o caminho relativo para o directório que contém os ficheiros .ttf e o array $fontes contém, no final, o nome de cada um dos ficheiros ttf. Este array podia estar definido directamente no código em vez de, a cada execução, estar a ir ler a directoria mas desta forma se se quiser adicionar um novo tipo de letra é só meter o ficheiro .ttf na pasta e escusa-se de se mexer em código.
Depois, é só preciso trocar a linha que chamava a função imagetext() pelas seguintes:
$angulo = mt_rand(0, 90) - 45;
$fonte = $fontes[mt_rand(0, $fontes_size)];
imagettftext($img, mt_rand(12,18), $angulo, $i*20+10, mt_rand(20, 40), $cor_texto, $dir_local.$fonte, $car);
A função imagettftext permite escrever texto com ângulo. Na primeira linha o ângulo que o texto toma é definido aleatoriamente entre -45º e 45º (para evitar que apareçam letras ao contrário)
Na segunda linha é escolhida, entre as disponíveis, qual a fonte a usar, de uma forma aleatória.
Por fim na última linha é escrita a letra em questão. De notar que, para evitar que as letras se sobrepusessem aqui a coordenada x é fixa para cada letra apenas variando a coordenada y.
E está pronto! Código para download na caixa à direita ->
Resultado Final:
JRomão |
Contacto |
Termos de Uso
© 2009 - 2012 JRomão
Download Opera - World's fastest and most secure Web browser.