Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Hasilkan kod pengesahan imej menggunakan pustaka PHP dan GD

Hasilkan kod pengesahan imej menggunakan pustaka PHP dan GD

WBOY
WBOYasal
2023-05-11 08:34:35991semak imbas

Dengan perkembangan Internet, semakin banyak tapak web perlu menggunakan kod pengesahan untuk menghalang pendaftaran berniat jahat, perangkak dan gelagat lain. Kod pengesahan imej ialah bentuk kod pengesahan biasa Ia memaparkan imej yang mengandungi aksara atau nombor rawak, membolehkan pengguna memasukkan kod pengesahan yang betul sebelum meneruskan ke langkah seterusnya. Artikel ini akan memperkenalkan cara menggunakan pustaka PHP dan GD untuk menjana kod pengesahan imej.

Pustaka GD ialah perpustakaan pemprosesan imej yang boleh digunakan untuk menjana, memproses dan memanipulasi pelbagai format imej. PHP mempunyai perpustakaan GD terbina dalam dan menyediakan banyak fungsi untuk mencipta dan memanipulasi imej, jadi sangat mudah untuk menggunakan perpustakaan PHP dan GD untuk menjana kod pengesahan imej.

Langkah 1: Jana teks kod pengesahan

Pertama, kita perlu menjana rentetan rawak, yang akan dipaparkan pada imej kod pengesahan. Anda boleh menggunakan fungsi terbina dalam PHP rand() dan chr() untuk menjana aksara ASCII dengan panjang yang ditentukan:

$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= chr(rand(97, 122));
}

Kod di atas menggunakan nilai kod ASCII untuk menjana rentetan rawak empat aksara antara 97 dan 122. Anda boleh mengubah suai kod ini untuk menjana rentetan yang mengandungi nombor, atau untuk menambah panjang rentetan, mengikut keperluan anda.

Langkah 2: Buat kanvas

Selepas menjana teks kod pengesahan, kita perlu mencipta kanvas untuk memaparkannya. Gunakan fungsi PHP terbina dalam imagecreate() untuk mencipta kanvas dengan lebar dan ketinggian yang ditentukan:

$width = 120;
$height = 40;
$image = imagecreate($width, $height);

Kod di atas mencipta kanvas $imej dengan lebar 120 piksel dan ketinggian 40 piksel.

Langkah 3: Tetapkan warna latar belakang dan warna teks

Untuk menjadikan imej kod pengesahan lebih mudah dikenali, kami perlu menetapkan beberapa warna, termasuk warna latar belakang, warna teks, dsb. Cipta warna menggunakan fungsi PHP terbina dalam imagecolorallocate():

$bg_color = imagecolorallocate($image, 255, 255, 255); // 将背景色设置为白色
$text_color = imagecolorallocate($image, 0, 0, 0); // 将文字颜色设置为黑色

Kod di atas menetapkan warna latar belakang kepada putih dan warna teks kepada hitam. Anda boleh mengubah suai nilai warna mengikut keperluan anda.

Langkah 4: Tambah garis gangguan dan titik hingar

Untuk meningkatkan kesukaran kod pengesahan, kami boleh menambah beberapa garisan gangguan dan titik hingar. Gunakan imageline() fungsi terbina dalam PHP untuk mencipta garisan gangguan:

for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 生成一种随机颜色
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $line_color); // 在随机位置生成一条干扰线
}

Kod di atas menjana 5 baris gangguan rawak. Anda boleh menambah atau mengurangkan bilangan talian gangguan mengikut keperluan anda.

Gunakan PHP fungsi terbina dalam imagesetpixel() untuk mencipta titik hingar:

for ($i = 0; $i < 100; $i++) {
    $noise_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 生成一种随机颜色
    imagesetpixel($image, rand(0, $width), rand(0, $height), $noise_color); // 在随机位置生成一个噪点
}

Kod di atas menjana 100 titik hingar rawak. Anda boleh menambah atau mengurangkan jumlah bunyi mengikut keperluan anda.

Langkah 5: Tambahkan teks

Akhir sekali, kita perlu menambah teks kod pengesahan yang dijana pada kanvas. Gunakan fungsi terbina dalam PHP imagettftext() untuk mencipta teks:

$font_path = 'font.ttf'; // 字体文件路径
$font_size = 20; // 字体大小
$x = 20; // 文本起始横坐标
$y = 30; //文本起始纵坐标
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_path, $code); // 将验证码文本添加到画布上

Kod di atas menggunakan font fail fon.ttf untuk mencipta teks bersaiz 20 dan menambah teks pada kedudukan kanvas yang ditentukan .

Langkah 6: Keluarkan imej

Akhir sekali, kami perlu mengeluarkan imej kod pengesahan yang dijana ke penyemak imbas atau menyimpannya ke fail. Gunakan fungsi PHP terbina dalam imagepng() untuk mengeluarkan imej ke penyemak imbas:

header('Content-Type: image/png');
imagepng($image);

Kod di atas menetapkan jenis output kepada imej/png dan mengeluarkan kanvas $imej kepada penyemak imbas dalam format PNG. Format imej lain seperti JPEG, GIF, dsb. juga boleh digunakan.

Kod lengkap adalah seperti berikut:

$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= chr(rand(97, 122));
}

$width = 120;
$height = 40;
$image = imagecreate($width, $height);

$bg_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);

for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $line_color);
}

for ($i = 0; $i < 100; $i++) {
    $noise_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $noise_color);
}

$font_path = 'font.ttf';
$font_size = 20;
$x = 20;
$y = 30;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_path, $code);

header('Content-Type: image/png');
imagepng($image);

Sangat mudah untuk menjana kod pengesahan imej menggunakan perpustakaan PHP dan GD, cuma ikut langkah di atas. Bagi mereka yang mempunyai asas pengaturcaraan tertentu, proses penjanaan boleh dioptimumkan lagi, seperti menggunakan kombinasi aksara atau nombor yang lebih kompleks, fon tersuai, dsb. Tetapi tidak kira apa jenis kod pengesahan imej itu, ia adalah alat asas untuk mencegah penipuan dalam talian dan telah memberikan sumbangan penting kepada pembinaan keselamatan Internet.

Atas ialah kandungan terperinci Hasilkan kod pengesahan imej menggunakan pustaka 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