當前位置: 首頁> 最新文章列表> 圖像生成驗證碼:GD2 圖像動態添加文本

圖像生成驗證碼:GD2 圖像動態添加文本

M66 2025-05-29

在Web開發中,驗證碼圖像常用於防止自動提交表單。 PHP 提供了豐富的圖像處理函數來生成驗證碼圖像。其中, imagecreatefromgd2()是一個用於從GD2 文件創建圖像資源的函數,但它通常用於讀取已有的圖像資源,而不是直接生成圖像。不過,我們可以結合imagegd2()函數將動態生成的圖像保存為GD2 格式,再通過imagecreatefromgd2()讀取後處理。

本文將演示如何動態生成一個帶有隨機文本的驗證碼圖像,並使用imagecreatefromgd2()讀取處理該圖像。

步驟概覽

  1. 創建一個圖像資源

  2. 添加背景色和隨機驗證碼文字

  3. 保存為.gd2格式

  4. 讀取.gd2文件並輸出為最終圖像

示例代碼

<?php
// Step 1: 動態創建驗證碼圖像
$width = 150;
$height = 50;
$image = imagecreatetruecolor($width, $height);

// 設置背景色
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白色
imagefill($image, 0, 0, $bgColor);

// 設置文本顏色
$textColor = imagecolorallocate($image, 0, 0, 0); // 黑色

// 生成隨機驗證碼內容
$captcha = '';
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
for ($i = 0; $i < 6; $i++) {
    $captcha .= $chars[rand(0, strlen($chars) - 1)];
}

// 添加文字到圖像
$fontSize = 5; // 1 到 5 的字體大小
$x = 10;
$y = ($height - imagefontheight($fontSize)) / 2;
imagestring($image, $fontSize, $x, $y, $captcha, $textColor);

// Step 2: 保存圖像為 .gd2 文件
$gd2Path = 'captcha.gd2';
imagegd2($image, $gd2Path);

// 銷毀原始圖像資源
imagedestroy($image);

// Step 3: 使用 imagecreatefromgd2 讀取圖像
$gd2Image = imagecreatefromgd2($gd2Path);

// 設定 HTTP 頭輸出圖像
header('Content-Type: image/png');
imagepng($gd2Image);

// 清理
imagedestroy($gd2Image);
?>

使用說明

  • 請確保PHP 安裝時啟用了GD 庫(一般默認啟用)。

  • 文件保存路徑captcha.gd2應有寫入權限。

  • 你可以將驗證碼內容保存在$_SESSION中,以用於後續驗證。

示例應用場景

你可以在表單中嵌入這個動態生成的驗證碼圖像:

 <form method="post" action="https://m66.net/verify.php">
    <img src="https://m66.net/captcha.php" alt="驗證碼">
    <input type="text" name="captcha" placeholder="请输入驗證碼">
    <input type="submit" value="提交">
</form>

小結

雖然imagecreatefromgd2()並不直接用於創建圖像,但通過先使用imagegd2()生成GD2 文件,再讀取並輸出,可以達到動態生成驗證碼圖像的目的。這種方式適用於需要中間圖像緩存或圖像模板的場景。

如需更複雜的驗證碼圖像(扭曲、干擾線、字體變化等),可以使用imagettftext()函數結合TTF 字體實現更多高級功能。

需要我演示一個帶TTF 字體的驗證碼版本嗎?