Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan terbaik untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD

Amalan terbaik untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD

PHPz
PHPzasal
2023-07-13 21:49:401143semak imbas

Amalan terbaik untuk menggunakan perpustakaan PHP dan GD untuk menjana imej kod pengesahan

Dalam pembangunan web, untuk mengelakkan serangan berniat jahat dan operasi automasi mesin, banyak tapak web akan menggunakan kod pengesahan untuk mengesahkan identiti pengguna. CAPTCHA ialah jujukan aksara rawak berasaskan imej yang memerlukan pengguna memasukkan dengan betul untuk terus mengakses tapak web. Artikel ini akan memperkenalkan amalan terbaik untuk menjana imej kod pengesahan menggunakan PHP dan pustaka GD serta memberikan contoh kod.

Pustaka GD ialah perpustakaan pemprosesan grafik yang biasa digunakan Anda boleh menggunakan perpustakaan GD dalam PHP untuk mencipta, memanipulasi dan mengeluarkan imej. Ia menyediakan beberapa fungsi pemprosesan imej biasa, seperti melukis garisan, menambah teks, mencipta lakaran kenit dan banyak lagi. Apabila menggunakan pustaka GD untuk menjana imej kod pengesahan, kita boleh melakukannya melalui langkah berikut:

  1. Buat imej kosong

Pertama, kita perlu mencipta imej kosong dengan saiz yang ditentukan. Anda boleh menggunakan fungsi imagecreatetruecolor() yang disediakan oleh pustaka GD untuk mencipta imej warna sebenar dengan lebar dan ketinggian yang ditentukan. Kod tersebut adalah seperti berikut: imagecreatetruecolor()函数来创建一个指定宽度和高度的真彩色图像。代码如下:

$width = 200; // 图片宽度
$height = 50; // 图片高度
$image = imagecreatetruecolor($width, $height); // 创建一个空白图片
  1. 绘制背景色

为了增加验证码图片的可读性和安全性,我们可以给图片添加一个随机的背景色。可以使用GD库提供的imagefill()函数来填充背景色。代码如下:

$bgColor = imagecolorallocate($image, 255, 255, 255); // 设置背景颜色为白色
imagefill($image, 0, 0, $bgColor); // 填充背景色
  1. 绘制验证码文字

生成和绘制验证码文字是生成验证码图片的重要步骤。我们可以选择在图片的指定位置绘制文字,使得用户更容易看清验证码。可以使用GD库提供的imagettftext()函数来绘制验证码文字。代码如下:

$font = 'path/to/your/font.ttf'; // 字体文件路径
$textColor = imagecolorallocate($image, 0, 0, 0); // 设置文字颜色为黑色
$fontSize = 20; // 设置文字大小

$length = 4; // 验证码长度
$charSet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 验证码字符集
$code = '';
for ($i = 0; $i < $length; $i++) {
    $char = $charSet[rand(0, strlen($charSet) - 1)];
    $code .= $char;
    $x = ($width / $length) * $i + 10; // 计算每个字符的x坐标
    $y = $height / 2 + $fontSize / 2; // 计算字符的y坐标
    imagettftext($image, $fontSize, 0, $x, $y, $textColor, $font, $char); // 绘制字符
}

// 保存验证码到Session或数据库中
session_start();
$_SESSION['captcha'] = $code;
  1. 添加干扰线

为了进一步增加验证码的可读性和安全性,我们可以在图片中添加一些干扰线。可以使用GD库提供的imageline()函数来绘制干扰线。代码如下:

$lineColor = imagecolorallocate($image, 0, 0, 0); // 设置干扰线颜色为黑色
$lineNum = 5; // 干扰线数量

for ($i = 0; $i < $lineNum; $i++) {
    $x1 = rand(0, $width / 2);
    $y1 = rand(0, $height);
    $x2 = rand($width / 2, $width);
    $y2 = rand(0, $height);
    imageline($image, $x1, $y1, $x2, $y2, $lineColor); // 绘制干扰线
}
  1. 输出验证码图片

最后,我们需要将生成的验证码图片输出给用户。可以使用GD库提供的header()函数和imagepng()

header('Content-Type: image/png'); // 设置Content-Type为image/png
imagepng($image); // 输出验证码图片
imagedestroy($image); // 销毁图片资源

    Lukis warna latar belakang

    Untuk meningkatkan kebolehbacaan dan keselamatan imej kod pengesahan, kami boleh menambah warna latar belakang rawak pada imej. Anda boleh menggunakan fungsi imagefill() yang disediakan oleh pustaka GD untuk mengisi warna latar belakang. Kod tersebut adalah seperti berikut:

    rrreee

      Lukis teks kod pengesahan

  • Menjana dan melukis teks kod pengesahan ialah langkah penting dalam menghasilkan imej kod pengesahan. Kami boleh memilih untuk melukis teks di lokasi yang ditetapkan dalam imej untuk memudahkan pengguna melihat kod pengesahan. Anda boleh menggunakan fungsi imagettftext() yang disediakan oleh pustaka GD untuk melukis teks kod pengesahan. Kod tersebut adalah seperti berikut:
  • rrreee
    Tambah garisan gangguan🎜🎜🎜Untuk meningkatkan lagi kebolehbacaan dan keselamatan kod pengesahan, kami boleh menambahkan beberapa garisan gangguan pada gambar. Anda boleh menggunakan fungsi imageline() yang disediakan oleh pustaka GD untuk melukis garisan gangguan. Kod tersebut adalah seperti berikut: 🎜rrreee
      🎜Keluarkan imej kod pengesahan🎜🎜🎜Akhir sekali, kami perlu mengeluarkan imej kod pengesahan yang dijana kepada pengguna. Anda boleh menggunakan fungsi header() dan fungsi imagepng() yang disediakan oleh pustaka GD untuk mengeluarkan imej kod pengesahan. Kodnya adalah seperti berikut: 🎜rrreee🎜Melalui langkah di atas, kita boleh menggunakan perpustakaan PHP dan GD untuk menjana imej yang mengandungi kod pengesahan rawak. Sebelum mengeluarkan imej, kami juga boleh menambah beberapa langkah pemprosesan dan pengoptimuman imej, seperti menambah hingar, mengaburkan, memampatkan imej, dll., untuk meningkatkan kesukaran imej dan mengoptimumkan pengalaman pengguna. 🎜🎜Untuk meringkaskan, amalan terbaik untuk menggunakan perpustakaan PHP dan GD untuk menjana imej kod pengesahan termasuk mencipta imej kosong, melukis warna latar belakang, melukis teks kod pengesahan, menambah garisan gangguan dan mengeluarkan imej kod pengesahan. Dengan menggabungkan keperluan senario aplikasi, kami juga boleh menambah langkah pemprosesan dan pengoptimuman imej lain untuk meningkatkan keselamatan dan kebolehbacaan kod pengesahan. 🎜🎜Rujukan: 🎜🎜🎜Dokumentasi perpustakaan PHP GD: https://www.php.net/manual/en/book.image.php🎜🎜

Atas ialah kandungan terperinci Amalan terbaik untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD. 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