在之前的文章中給大家?guī)砹恕禤HP如何上傳文件?看完就明白了!》,其中詳細的給大家介紹了在PHP中應(yīng)該怎樣上傳文件,本篇文章來一起看一看PHP中圖像處理的相關(guān)知識,希望對大家有幫助!
圖像處理是PHP工作中常遇到的事情,我們遇到需要處理圖像的場景有很多,例如圖像驗證碼、圖片水印等等場景。其實學(xué)習(xí)圖像處理的重點實際是學(xué)習(xí)PHP中GD系統(tǒng)的函數(shù),PHP的圖像處理需要GD庫的支持,那接下來我們首先來看一下關(guān)于GD庫的相關(guān)知識吧。
GD庫
GD庫可以理解為一個用于創(chuàng)建圖形圖像的函數(shù)庫,GD庫實際是由C語言編寫的,可以用于PHP中,除了PHP外還可以在Perl等多種語言中使用,GD 庫中提供了很多用來處理圖片的接口,
PHP 中使用 GD 庫可以在頁面中繪制各種圖形圖像,統(tǒng)計圖,還有圖像驗證碼也可以使用GD庫來實現(xiàn)。
示例如下:
<?php phpinfo(); ?>
當(dāng)輸入之后,在輸出結(jié)果中,如果出現(xiàn)如下所示的兩個選項,則表示當(dāng)前的機器支持通過GD來處理圖像:
或者可以使用:
<?php print_r(gd_info()); ?>
輸入之后運行,若輸出結(jié)果如下圖所示,也表示當(dāng)前機器支持通過GD來處理圖像。
那如果沒有安裝好的話,也可以通過在 Windows 系統(tǒng)下只需將 php.ini 配置文件中“extension=php_gd2.dll”一項前面的注釋刪除的方法完成。
在 PHP 中,通過 GD 庫處理圖像的操作一般分為 4 個基本步驟:
-
創(chuàng)建畫布
-
繪制圖像
-
輸出圖像
-
釋放資源
通過這四步我們就完成了對圖像的基本操作了,你接下來我們一起來看一下應(yīng)該怎么操作吧。
創(chuàng)建畫布
我們所有的繪圖和圖像處理都需要在一個背景圖片上面完成,也就是畫布,可以理解為為圖像我們在內(nèi)存中有一片臨時的區(qū)域作為畫布,用來儲存圖像的信息,以后的圖像操作都會在這片區(qū)域也就是畫布上進行。
imagecreate()
和 imagecreatetruecolor()
用來創(chuàng)建畫布,它們的語法格式如下:
imagecreate(int $width, int $height) imagecreatetruecolor(int $width, int $height)
其中,$width 表示創(chuàng)建畫布的寬度也可以理解為圖像的寬度,$height 表示創(chuàng)建畫布的高度也就是圖像的高度
這兩個函數(shù)都可以用來創(chuàng)建畫布,不過其中不同的是,他們可以容納的色彩范圍不同。
示例如下:
<?php $img = @imagecreatetruecolor(120, 20) or die('畫布創(chuàng)建失?。?#39;); ?>
由于只是創(chuàng)建了一個畫布上面并沒有東西,瀏覽器也不會輸出畫布,但是可以通過 imagesx() 和 imagesy() 來獲取圖像的寬和高:
<?php $img = @imagecreatetruecolor(120, 20) or die('畫布創(chuàng)建失??!'); echo '畫布的寬度為:'.imagesx($img).'像素'; echo '<br>畫布的高度為:'.imagesy($img).'像素'; ?>
輸出結(jié)果:
由此我們便完成了創(chuàng)建一個畫布。
除了使用上面兩個函數(shù)創(chuàng)建畫布之外,還可以通過以下方式,通過文件或者url創(chuàng)建圖像:
-
imagecreatefromgif()
: 通過 GIF 文件或者 URL 新建一個圖像 -
imagecreatefromjpeg()
: 通過 JPEG 文件或者 UR 新建一個圖像 -
imagecreatefrompng()
: 通過 PNG 文件或者 UR L新建一個圖像 -
imagecreatefromwbmp()
: 通過 WBMP 文件或者URL,新建一個圖像
輸出圖片
上述示例中,我們已經(jīng)成功的創(chuàng)建了畫布,在PHP中不同格式的圖像也需要不同的函數(shù)來進行輸出,不同的函數(shù)如下所示:
-
imagegif()
: 輸出一個GIF格式圖像到瀏覽器或文件 -
imagejpeg()
: 輸出一個JPEG格式圖像到瀏覽器或文件 -
imagepng()
:輸出一個PNG格式圖像到瀏覽器或文件
它們的語法格式如下:
imagegif(resource $image[, string $filename]) imagejpeg(resource $image[, string $filename[, int $quality]]) imagepng(resource $image[, string $filename])
其中,$image為創(chuàng)建的一個圖像資源;$filename表示為參數(shù),用來設(shè)置文件需要保存的路徑。
示例如下:
首先我在根目錄中已經(jīng)保存了一個名為php.png的圖像文件
<?php header('Content-type:image/jpeg'); $image= imagecreatefrompng('php.png'); imagepng($image); ?>
輸出結(jié)果:
通過imagecreatefrompng()函數(shù)和imagepng()成功的輸出了一個格式為png的圖片。
釋放圖像資源
通過上述示例已經(jīng)成功的輸出了圖片,在圖片的資源使用完成后,通常需要釋放圖像處理時所占用的內(nèi)存,那應(yīng)該怎樣操作呢?
在PHP中我們通過imagedestroy() 函數(shù)來釋放圖像資源,語法格式如下:
imagedestroy(resource $image)
其中$image表示需要釋放資源的圖像
示例如下:
<?php header('Content-type:image/jpeg'); $image= imagecreatefrompng('php.png'); imagepng($image); imagedestroy($image); ?>
因為釋放圖像資源的操作是沒有輸出內(nèi)容的,所以就不列出輸出結(jié)果了。
推薦學(xué)習(xí):《PHP視頻教程》