隨著Web2.0和互聯網應用的不斷發展,動態生成圖片已經成為Web應用中的常見需求。在PHP語言中,使用GD庫可以很方便地生成各種各樣的圖片,比如驗證碼、圖表、縮略圖等。
GD庫是PHP中一個非常強大的圖像處理庫,它提供了創建、處理、輸出各種圖像的函數。在使用GD庫之前,需要先確認PHP是否已安裝了該庫。可以在php.ini配置文件中查看是否含有gd擴展:
... [PHP] extension_dir = "ext" ... [ExtensionList] extension=php_gd2.dll ...
如果沒有這一行,則需要安裝gd庫,可以前往http://www.libgd.org/Download下載相應的庫文件,解壓到指定文件夾,并在php.ini文件中添加如下行,重啟Web服務器即可。
extension=php_gd2.dll
GD庫提供了非常多的函數,以下是一些常用的函數:
//創建一個指定大小的畫布 $image = imagecreatetruecolor($width, $height); //設置畫布背景色 $bg_color = imagecolorallocate($image, $r, $g, $b); //在畫布上繪制矩形 imagefilledrectangle($image, $x1, $y1, $x2, $y2, $color); //在畫布上繪制圓形 imagefilledellipse($image, $cx, $cy, $width, $height, $color); //在畫布上繪制字符串 imagestring($image, $font, $x, $y, $str, $color); //輸出PNG格式圖片 header('Content-Type: image/png'); imagepng($image);
除了上述函數,GD庫還提供了很多其他功能,比如合并圖片、旋轉圖片、設置圖片透明度等,具體用法可以參考官方文檔。
最常見的應用場景應該是驗證碼了。那么,如何使用GD庫生成驗證碼呢?
//生成一個指定長度指定字符集的驗證碼 function create_verification_code($length, $charset='1234567890') { $code = ''; $charset_len = strlen($charset); for ($i = 0; $i< $length; $i++) { $code .= $charset[mt_rand(0, $charset_len - 1)]; } return $code; } //生成驗證碼圖片 function create_verification_image($width=80, $height=30, $length=4) { $image = imagecreatetruecolor($width, $height); //創建畫布 $bg_color = imagecolorallocate($image, 255, 255, 255); //設置背景色 imagefill($image, 0, 0, $bg_color); //填充背景色 $code = create_verification_code($length); //生成驗證碼 $_SESSION['verification_code'] = $code; //將驗證碼保存到session中 $font_color = imagecolorallocate($image, 0, 0, 0); //設置文字顏色 for ($i = 0; $i< $length; $i++) { $font_size = mt_rand(18, 20); //文字大小 $angle = mt_rand(-30, 30); //文字旋轉角度 $x = $i * ($width - 10) / $length + 5; //每個字符的橫坐標 $y = mt_rand(5, 10); //每個字符的縱坐標 imagettftext($image, $font_size, $angle, $x, $y, $font_color, 'arial.ttf', $code[$i]); //輸出文字 } header('Content-Type: image/png'); //設置圖片格式 imagepng($image); //輸出圖片 imagedestroy($image); //銷毀畫布 }
上述代碼就可以生成一個簡單的驗證碼圖片了,后端程序只需要判斷用戶輸入的驗證碼是否正確即可。
除了驗證碼之外,GD庫還可以生成各種圖表、縮略圖等圖片。相比于使用圖片生成工具手動生成,使用GD庫可以更加靈活方便,可以根據實際需求動態生成圖片。
上一篇php gd無效