專套本考試完畢,做個圖形驗證碼筆記,也當做GD API的敲門磚。
前述
圖形驗證碼的生成需要使用GD庫。
GD庫是php處理圖形的擴展庫,提供了一系列用來生成、處理圖片的API。
貌似默認開啓,如若未開啓,請在php.ini
文件的extension=php_gd2.dll
行開啓,去除該段代碼前的;
即可。可使用print_r(gd_info());
來確認啓用狀況。
- 功能涵蓋:生成縮略圖、圖片加水印、驗證碼、生成報表 等。
- Tips:在2.0.28 版之前,GIF相關函數無法使用。”(來源:百度百科)
一般流程爲:生成或讀取畫布 → 定義所需顏色 → 填充內容 → 輸出圖片 → 銷燬畫布
imagecreate
所需函數
我們要用到的函數有:
1. imagecreate( int $x_size , int $y_size )
:用於創建畫布;
2. imagecolorallocate( resource $image , int $red , int $green , int $blue )
:用於分配顏色
3. imagesetpixel( resource $image , int $x , int $y , int $color )
:用於繪製單一像素。圖像左上角爲0,0
。
4. imagestring( resource $image , int $font , int $x , int $y , string $s , int $col )
:繪製字符串。
5. imagerectangle( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
:繪製矩形。左上角座標爲 x1, y1,右下角座標爲 x2, y2。
6. imagepng( resource $image [, string $filename ] )
:將 GD 圖像流(image)以 PNG 格式輸出,或者如果用 filename 給出了文件名則將其輸出到該文件。
7. imagedestroy ( resource $image )
:銷燬圖像佔用內存。
看了上述內容,我相信腦海中已經有了一個框架了,那麼我們來討論一些技術細節。
技術細節
用於聲明圖層文件的格式的HTTP頭,看代碼自己體悟:header("Content-Type:image/png");
。
關於HTTP頭的內容,詳見參考資料中的HTTP頭部詳解,供大家系統化的瞭解、熟悉頭部知識——那些問頭皮屑和毛髮知識的人,你們奏凱,23333~
結合前輩們的安利,提出簡單方案:
通過JavaScript自動獲取驗證碼圖片,並同步保存至Session。
在提交表單時,通過驗證碼準確性驗證後,方可執行請求。
參考資料:
PHP生成圖形驗證碼的幾種方法 - mysoftsky
經典的PHP驗證碼類分享 - junjie
HTTP頭部詳解 - zooyo