Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

WBOY
WBOYasal
2021-10-20 10:18:072107semak imbas

Dalam artikel sebelumnya, saya membawakan anda "Bagaimana untuk melukis poligon, lengkok dan elips dalam PHP? (Penjelasan grafik terperinci) ", yang memperkenalkan secara terperinci cara melukis grafik dalam PHP. Dalam artikel ini, kami akan melihat cara kami menjana kod pengesahan grafik dalam PHP. Semoga ia membantu semua orang!

Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

Melalui artikel kami sebelum ini mengenai lukisan imej dalam PHP, kami boleh menggunakan pengetahuan untuk membuat sambungan, iaitu pengesahan grafik yang sering kami gunakan pada halaman log masuk harian. bagaimanakah kod pengesahan grafik terbentuk?

Lukis teks

Fungsi yang biasa kami gunakan untuk melukis teks ialah:

  • imagechar() : Lukis aksara secara mendatar

  • imagecharup() : Lukis aksara secara menegak

  • imagestring() : Lukis garisan rentetan secara mendatar

  • imagestringup() : Lukiskan garisan rentetan secara menegak

  • imagettftext(): Gunakan fon TrueType untuk menulis teks pada imej

Antaranya, imagechar(), imagecharup(), imagestring Format sintaks () dan imagestringup() adalah sama Format sintaksnya adalah seperti berikut:

imagechar(resource $image, int $font, int $x, int $y, string $c, int $color)

Antaranya, $image mewakili kanvas yang dibuat dilakukan pada kanvas, $ fon mewakili warna fon yang dilukis, $x dan $y mewakili teks lukisan pada koordinat ($x, $y), $c mewakili aksara (atau rentetan) yang akan dilukis dan $warna mewakili warna fon yang dilukis.

Contohnya adalah seperti berikut:

<?php
    $a = &#39;young and beautiful&#39;;
    $img = imagecreate(300, 200);
    imagecolorallocate($img, 255, 255, 255);
    $green = imagecolorallocate($img, 0, 255, 0);
    imagestring($img, 5, 5, 50, $a, $green);
    imagestringup($img, 2, 200, 180, $a, $green);
    imagechar($img, 3, 80, 100, $a, $green);
    imagecharup($img, 4, 100, 100, $a, $green);
    header(&#39;Content-type:image/jpeg&#39;);
    imagejpeg($img);
    imagedestroy($img);
?>

Hasil output:

Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

Fungsi lain ialah imagettftext( ), ia juga boleh melukis teks Perbezaannya ialah ia boleh menggunakan fon TrueType, iaitu sambungan dalam sistem Windows. Fon dalam format ttf mempunyai sintaks berikut:

imagettftext(resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text)

Antaranya, $size mewakili saiz aksara, $angle mewakili sudut dan 0 darjah dalam sudut ini mewakili teks yang dibaca daripada kiri ke kanan, nilai meningkat mengikut arah lawan jam; $fontfile mewakili laluan fail fon TrueType yang akan digunakan;

Contohnya adalah seperti berikut:

<?php
    $str1 = &#39;young and beautiful&#39;;
    $font = &#39;C:\Windows\Fonts\simhei.ttf&#39;;
    $img = imagecreate(300, 300);
    imagecolorallocate($img, 255, 255, 255);
    $green = imagecolorallocate($img, 0, 255, 0);
    imagettftext($img, 16, 45, 40, 250, $green, $font, $str1);
    header(&#39;Content-type:image/jpeg&#39;);
    imagejpeg($img);
    imagedestroy($img);
?>

Hasil keluaran:

Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

Oleh itu, imagettftext( ) fungsi digunakan Selesai melukis teks.

Lukis kod pengesahan grafik

Selepas pembelajaran melukis teks dan imej sebelum ini, kita boleh melukis grafik berdasarkan pengetahuan yang telah kita pelajari sebelum Melukis kod pengesahan, kami sering menemui kod pengesahan grafik dalam antara muka log masuk kami, jadi mari kita lihat cara untuk menciptanya.

Pertama, mari kita lihat kesan akhir:

Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

Untuk mencapai kesan sedemikian, anda perlu melalui beberapa langkah:

Langkah pertama ialah menyediakan kanvas yang kita perlukan iaitu mencipta kanvas. Kemudian sediakan rentetan yang ingin kita hasilkan, lukis corak gangguan pada kanvas, kemudian keluarkan imej, dan akhirnya lepaskan sumber.

Contoh adalah seperti berikut:

<?php
check_code();
function check_code($width = 100, $height = 50, $num = 4, $type = &#39;jpeg&#39;) {
 $img = imagecreate($width, $height);
 $string = &#39;&#39;;
 for ($i = 0; $i < $num; $i++) {
 $rand = mt_rand(0, 2);
 switch ($rand) {
 case 0:
 $ascii = mt_rand(48, 57); //0-9
 break;
 case 1:
 $ascii = mt_rand(65, 90); //A-Z
 break;
 case 2:
 $ascii = mt_rand(97, 122); //a-z
 break;
 }
 //chr()
 $string .= sprintf(&#39;%c&#39;, $ascii);
 }
 //背景颜色
 imagefilledrectangle($img, 0, 0, $width, $height, randBg($img));
 //画干扰元素
 for ($i = 0; $i < 50; $i++) {
 imagesetpixel($img, mt_rand(0, $width), mt_rand(0, $height), randPix($img));
 }
 //写字
 for ($i = 0; $i < $num; $i++) {
 $x = floor($width / $num) * $i + 2;
 $y = mt_rand(0, $height - 15);
 imagechar($img, 5, $x, $y, $string[$i], randPix($img));
 }
 //imagejpeg
 $func = &#39;image&#39; . $type;
 $header = &#39;Content-type:image/&#39; . $type;
 if (function_exists($func)) {
 header($header);
 $func($img);
 } else {
 echo &#39;图片类型不支持&#39;;
 }
 imagedestroy($img);
 return $string;
}
//浅色的背景
function randBg($img) {
 return imagecolorallocate($img, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
}
//深色的字或者点这些干 扰元素
function randPix($img) {
 return imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
}
?>

Hasil keluaran:

Bagaimana untuk menarik kod pengesahan grafik melalui PHP?Bagaimana untuk menarik kod pengesahan grafik melalui PHP?Bagaimana untuk menarik kod pengesahan grafik melalui PHP?

Pembelajaran yang disyorkan :《Tutorial video PHP

Atas ialah kandungan terperinci Bagaimana untuk menarik kod pengesahan grafik melalui PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn