【例項】使用GD庫生成圖片驗證碼
一、載入 GD 庫
GD 庫是一個開放的、動態建立影像的、原始碼公開的函式庫,可以從官網下載。目前,GD 庫支援 GIF、PNG、JPEG、WBMP 和 XBM 等多種影像格式,用於對影像的處理。
GD 庫在 PHP5 是預設安裝的,但要啟用 GD 庫,必需設定 php.ini 檔案。即將該檔案中的“;extension=php_gd2.dll”選項前的分號“;”刪除。儲存修改後的檔案並重啟 Apache 伺服器即可。
在成功載入 GD2 函式庫後,可以通過 phpinfo() 函式來獲取 GD2 函式庫的安裝資訊,驗證 GD 庫是否安裝成功。在瀏覽器中輸入“域名/phpinfo.php”並按 Enter 鍵,在開啟的頁面中如果檢索到下圖中的 GD 庫的安裝資訊,說明 GD 庫安裝成功。
如果使用的是 PHP 整合開發環境,預設 GD2 函式庫已經被載入。
二、開發步驟
1、使用 imagecreatetruecolor()函式建立一個圖片(即畫布)。
2、填充圖片背景,使用 imagettftext()函式向圖片新增隨機驗證碼。
3、設定干擾,使用 imagesetpixel()函式給圖片新增干擾點。
4、設定干擾,使用 imageline()函式給圖片新增干擾線。
5、輸出圖片,然後釋放資源。
6、最後在展示頁面輸出圖片驗證碼。
三、程式碼
1、驗證碼生成檔案:code.php
<?php
//啟動session
session_start();
$code = ""; //驗證碼字串
//驗證碼字元取值範圍[a-z0-9]
$str = "qwertyuiopasdfghjklzxcvbnm1234567890";
$w = 160; //圖片寬度
$h = 40; //圖片高度
$num = 4; //驗證碼字元數
$dotNum = 300; //干擾點個數
$lineNum = rand(3, 5); //干擾線條數
$font = "simsunb.ttf"; //設定字型檔案
$image = imagecreatetruecolor($w, $h); //建立一張指定寬高的圖片
//設定背景圖片顏色為白色
$imageColor = imagecolorallocate($image, 255, 255, 255);
//填充圖片背景
//隨機驗證碼,包含字母和數字
imagefill($image, 0, 0, $imageColor);
for ($i = 0; $i < $num; $i++) {
$fontColor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120)); // 生成隨機字型顏色
//隨機取字符集中的值
$content = substr($str, rand(0, strlen($str)), 1);
$code .= $content;
$fontSize = rand(15, 25); // 字型大小
// 指定生成位置X軸偏移量
$x = $i * $w / $num + rand(5, 10);
$y = rand(20, 30); // 指定生成位置Y軸偏移量
imagettftext($image, $fontSize, 0, $x, $y, $fontColor, $font, $content);
}
$_SESSION["code"] = $code; //儲存驗證碼字串到session中
//生成干擾點
for ($i = 0; $i < $dotNum; $i++) {
$dotColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
imagesetpixel($image, rand(0, $w), rand(0, $h), $dotColor);
}
//生成干擾線
for ($i = 0; $i < $lineNum; $i++) {
$lineColor = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imageline($image, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $lineColor);
}
header("content-type:image/png");
imagepng($image);
imagedestroy($image);
2、圖片驗證碼應用檔案:front.php
<?php
if(isset($_REQUEST["code"])){
session_start();
if(strtolower($_POST["code"])==$_SESSION["code"]){
echo "<script>alert('正確!')</script>";
}else{
echo "<script>alert('錯誤!')</script>";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>驗證碼</title>
<style>
#code{
border: 1px solid #ccc;
vertical-align: bottom;
}
#refresh{
text-decoration: none;
font-size: .875em;
}
</style>
</head>
<body>
<form action="" method="post">
<p>
驗證碼:
<img src="code.php?r=<?php echo rand()?>" alt="" id="code">
<a href="javascript:;" id="refresh">看不清?</a>
</p>
<p>
輸入驗證碼:
<input type="text" name="code">
</p>
<input type="submit" value="提交">
<script>
// 重新整理驗證碼
document.getElementById("code").onclick = document.getElementById("refresh").onclick = refresh;
function refresh() {
document.getElementById('code').src='code.php?r='+Math.random()
}
</script>
</form>
</body>
</html>
四、效果展示
相關文章
- 5種PHP生成圖片驗證碼例項PHP
- Django登入(含隨機生成圖片驗證碼)註冊例項Django隨機
- golang 生成圖片驗證碼Golang
- Web前端技巧分享:教你用GD庫生成驗證碼Web前端
- 【日常筆記】生成驗證碼圖片筆記
- 校驗碼圖片生成
- 登陸介面模組解析——生成圖片驗證碼
- 圖片驗證碼 CaptchaAPT
- 圖片驗證碼介面
- GD 庫 PNG 透明底圖片新增文字及圖片水印
- Flutter 生成圖形驗證碼Flutter
- 一步一步生成滑動驗證碼圖片
- JavaScript 表單驗證程式碼例項JavaScript
- .Net WebAPI 生成圖形驗證碼WebAPI
- VUE例項:使用 CSS Filter 處理圖片VueCSSFilter
- 圖形驗證碼圖片樣式設定
- js圖片切換例項JS
- Java隨機生成圖片與HTML表單中的驗證碼實現Java隨機HTML
- 短視訊app搭建,利用javaWeb生成一張簡易驗證碼圖片APPJavaWeb
- 使用"mews/captcha:~2.0" 驗證碼圖片不顯示問題APT
- node實現登入圖片驗證碼
- JavaScript驗證碼生成和驗證效果JavaScript
- PHP GD庫解析一張簡單圖片並輸出PHP
- 點選驗證圖片
- 滑塊驗證圖片
- 旋轉圖片驗證
- 短視訊商城系統,通過Java實現圖片驗證碼,點選重新整理圖片驗證碼Java
- CSS 例項之翻轉圖片CSS
- Composer 使用 JWT 生成 TOKEN 例項JWT
- Python圖片驗證碼降噪 — 8鄰域降噪Python
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- png圖片隱寫例項之隱藏二維碼
- gofiber: 使用圖形驗證碼dGo
- 成品直播原始碼,例項原始碼系列-更改圖片透明度原始碼
- java之使用Servlet生成驗證碼的原始碼分享JavaServlet原始碼
- Python快速生成驗證碼Python
- PHP影像處理繪圖、水印、驗證碼、影像壓縮技術例項總結PHP繪圖
- flask專案1實戰:2.2 flask框架下使用圖片驗證碼Flask框架