在Web開發中,驗證碼圖像常用於防止自動提交表單。 PHP 提供了豐富的圖像處理函數來生成驗證碼圖像。其中, imagecreatefromgd2()是一個用於從GD2 文件創建圖像資源的函數,但它通常用於讀取已有的圖像資源,而不是直接生成圖像。不過,我們可以結合imagegd2()函數將動態生成的圖像保存為GD2 格式,再通過imagecreatefromgd2()讀取後處理。
本文將演示如何動態生成一個帶有隨機文本的驗證碼圖像,並使用imagecreatefromgd2()讀取處理該圖像。
創建一個圖像資源
添加背景色和隨機驗證碼文字
保存為.gd2格式
讀取.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 字體的驗證碼版本嗎?