近來,越來越多的網(wǎng)站開始使用GD庫配合PHP搭建圖像處理系統(tǒng)。GD是一款專門用于代碼實(shí)現(xiàn)圖像處理的庫,可用于生成動態(tài)圖片、縮略圖、驗(yàn)證碼、水印等等。今天我們來詳細(xì)了解一下GD PHP的使用方法以及相關(guān)技巧。
正文:
一、生成驗(yàn)證碼
生成驗(yàn)證碼是網(wǎng)站開發(fā)中很常見的需求,該技術(shù)可以有效防止機(jī)器惡意注冊等問題。而GD PHP正是為這種需求而生。我們使用GD PHP生成驗(yàn)證碼的流程為:
1.生成驗(yàn)證碼隨機(jī)數(shù)
2.使用imagecreatetruecolor()函數(shù)創(chuàng)建一個(gè)真彩色畫布
3.填充一個(gè)白色的畫布
4.在畫布上寫上生成的隨機(jī)數(shù)
5.添加干擾線,增強(qiáng)驗(yàn)證碼的安全性
6.輸出圖像
具體實(shí)現(xiàn)代碼如下:
$image = imagecreatetruecolor(100, 30); //創(chuàng)建畫布寬100高30的畫布
$bg_color = imagecolorallocate($image, 255, 255, 255);//白色背景
imagefill($image, 0, 0, $bg_color);
$captcha_code = '';
for ($i = 0; $i< 4; $i++) //每次隨機(jī)生成4個(gè)字符
{
$captcha_code .= chr(rand(97, 122));//隨機(jī)生成a~z之間的字符
}
$_SESSION["captcha_code"] = $captcha_code;//將驗(yàn)證碼存到session中
$captcha_color = imagecolorallocate($image, 0, 0, 0);//定義字符顏色;
imagestring($image, 5, 25, 5, $captcha_code, $captcha_color);//將字符寫到畫布上
for ($i = 0; $i< 5; $i++) {//添加5條干擾線
$line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
imageline($image, rand(0, 100), rand(0, 30), rand(0, 100), rand(0, 30), $line_color);
}
header('Content-Type: image/png');//設(shè)置輸出頭
imagepng($image);//輸出到瀏覽器
imagedestroy($image);//釋放圖片占用的內(nèi)存
以上代碼就可以生成4位隨機(jī)字符的驗(yàn)證碼。
二、生成縮略圖
在網(wǎng)站中,我們經(jīng)常需要在列表頁中展示多張圖片,而這些圖片可能為原圖的幾倍甚至十幾倍大小,這顯然會影響頁面進(jìn)程速度,由此就需要將圖片進(jìn)行縮略。而GD PHP提供了方便簡單的縮略圖處理函數(shù)。下面是一個(gè)縮略圖的例子:$src_img = 'image/01.jpg';
$dst_img = 'thumb/01_thumb.jpg';
list($width, $height) = getimagesize($src_img);
$new_w = 200;
$new_h = 200;
$src_im = imagecreatefromjpeg($src_img);//打開原圖
$dst_im = imagecreatetruecolor($new_w, $new_h);//創(chuàng)建縮略圖畫布
imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $new_w, $new_h, $width, $height);//將原圖縮放到縮略圖畫布上
imagejpeg($dst_im, $dst_img);//輸出新圖像
imagedestroy($dst_im);//釋放圖片占用的內(nèi)存
函數(shù)imagecopyresized有9個(gè)參數(shù),前兩個(gè)參數(shù)為縮略圖的畫布和原圖的畫布,第3、4個(gè)參數(shù)對應(yīng)縮略圖畫布上的x、y坐標(biāo),第5、6個(gè)參數(shù)分別表示原圖的x、y坐標(biāo),第7、8個(gè)參數(shù)為縮略圖的寬高,第9、10個(gè)參數(shù)為原圖的寬高。此函數(shù)根據(jù)原圖的寬高比例來縮放圖片。
三、添加圖片水印
有時(shí)候,我們需要將可以下載的圖片右下加上一些水印,以保護(hù)圖片版權(quán)。在這種情況下,我們需要用到GD函數(shù)庫中的imagecopymerge函數(shù)。函數(shù)具體用法如下:$src_file = 'image/02.jpg';
$src_im = imagecreatefromjpeg($src_file);//打開原圖
$watermark_file = 'image/logo.png';
$watermark_im = imagecreatefrompng($watermark_file);//打開水印圖片
list($w_width, $w_height) = getimagesize($watermark_file);
list($s_width, $s_height) = getimagesize($src_file);
$pos_x = $s_width - $w_width - 10;
$pos_y = $s_height - $w_height - 10;
imagecopymerge($src_im, $watermark_im, $pos_x, $pos_y, 0, 0, $w_width, $w_height, 50);//添加水印
header('Content-Type: image/png');//設(shè)置輸出頭
imagepng($src_im);//輸出新圖像
imagedestroy($src_im);
imagedestroy($watermark_im);
以上代碼參考了GD PHP官方文檔和PHP手冊,相信通過上述的廖文,大家對GD PHP有了一個(gè)初步的認(rèn)識,如果有更多有趣的GD PHP例子,歡迎留言評論,分享您的學(xué)習(xí)經(jīng)驗(yàn)。上一篇gd php linux
下一篇gd php 使用