溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中圖像處理簡介

發(fā)布時間:2020-07-13 12:52:48 來源:網(wǎng)絡 閱讀:507 作者:PXZ6603 欄目:web開發(fā)

PHP圖形處理相關函數(shù)舉例

在PHP中有的圖形函數(shù)可以直接使用,但大多數(shù)函數(shù)需要安裝GD2函數(shù)庫才能使用。在Windows平臺下,安裝GD2庫很簡單,PHP5中自帶了GD2庫擴展(就是PHP的ext目錄下的php_gd2.dll文件)。運行phpinfo()頁面查看是否有GD的部分,如果有,說明已經(jīng)安裝了GD2庫,如果沒有,說明安裝PHP時沒有安裝GD2庫。打開php.ini文件,查看文件中是否有一句“;extension=php_gd2.dll”,如果有則將其中的“;”去掉,再打開文件擴展目錄extension_dir的值設置成PHP的ext目錄所在的完整路徑,保存后重啟Apache即可。

PHP所能處理的圖像格式取決于所安裝的GD版本,以及其他GD可能用到的來訪問這些圖像格式的庫。低于gd-1.6版本的GD支持GIF格式,不支持PNG,高于gd-1.6低于gd-2.0.28的版本支持PNG,不支持GIF。在gd-2.0.28中又重新支持GIF。

目前的GD2庫支持JPEG、PNG、GIF、WBMP等文件格式。JPEG通常用來存儲照片或者具有豐富色彩和色彩層次的圖像,這種格式使用了有損壓縮,圖像質(zhì)量有所破壞,由于這個原因,該格式不適合繪制線條、文本或顏色塊。GIF是圖形文件交換格式,廣泛應用于網(wǎng)絡,適合存儲包含文本、線條和簡單顏色塊的圖像。PNG是可移植的網(wǎng)絡圖像,該嘎是是無損壓縮,所以適合直線、文本或簡單顏色塊的圖像,由于GIF的專利原因,PNG在一段時間內(nèi)是作為GIF的替代品使用的。WBMP是專門為無限通信設備設置的文件格式,但是沒有得到廣泛的發(fā)展。

一、創(chuàng)建圖形

在PHP中創(chuàng)建圖形的步驟有:創(chuàng)建一個背景、在背景中繪制圖形或輸入文本、輸出圖形、釋放所有資源。

注意在使用PHP輸出圖形時,一定要使用header()函數(shù)向瀏覽器發(fā)送頭信息,指定瀏覽器輸出相應格式的文件。若頭信息為“Content-type:p_w_picpath/png”,表示瀏覽器將輸出PNG格式的圖片。如果在程序中輸出文本信息,則在瀏覽器中不會顯示。

1.創(chuàng)建背景圖形

創(chuàng)建背景可以使用p_w_picpathcreate()和p_w_picpathcreatetruecoloc()函數(shù),這兩個函數(shù)都可以創(chuàng)建一個空白的圖形,并返回一個圖像標志符,供其它函數(shù)使用。

resource p_w_picpathcreate(int $x_size,int $y_size)

resource p_w_picpathcreatetruecolor(int $x_size,int $y_size)

$x_size是背景的寬度,$y_size是背景的高度,p_w_picpathcreate()函數(shù)用于建立一個基于調(diào)色板的圖形,創(chuàng)建后可改變背景顏色。p_w_picpathcreatetruecolor()函數(shù)用于創(chuàng)建一個真彩×××形,背景顏色默認為黑色。如果創(chuàng)建成功,函數(shù)將返回一個句柄,如果失敗,并不會像其他函數(shù)一樣返回FALSE,這時可以使用die()函數(shù)來捕獲錯誤信息。類似p_w_picpathcreate()的函數(shù)都可以使用die()函數(shù)來捕獲錯誤信息。

背景創(chuàng)建之后,就可以使用圖形函數(shù)在背景中繪制圖形或輸入文本。

2.使用已有圖片創(chuàng)建新圖形

p_w_picpathcreatefromfig()函數(shù)可以根據(jù)已有的GIF圖形創(chuàng)建新圖形,p_w_picpathcreatefromjpeg()函數(shù)可以根據(jù)已有的JPEG圖片創(chuàng)建新圖形,p_w_picpathcreatefrompng()函數(shù)可以根據(jù)已有的PNG圖片創(chuàng)建新圖形。已有的圖片可以是遠程的圖片文件。

使用這些函數(shù)后已有的圖片將作為新圖形的背景,之后的操作和p_w_picpathcreate()函數(shù)創(chuàng)建背景圖形的操作方法一樣。

3.選擇顏色

顏色值得選擇需要使用p_w_picpathcolorallocate()函數(shù)來完成。

int p_w_picpathcolorallocate(resource $p_w_picpath,int $red,int $green,int $blue)

p_w_picpathcolorallocate()函數(shù)返回一個標志符,代表了由給定的紅、綠、藍(RBG)值組成的顏色。$red、$green、$blue分別是所需要的顏色的紅、綠、藍成分。這些參數(shù)是0~255的整數(shù)或者是十六進制的0x00~0xFF。p_w_picpathcolorallocate()函數(shù)必須被調(diào)用以創(chuàng)建每一種用在$p_w_picpath所代表的圖形中的顏色。黑色(0,0,0)、紅色(255,0,0)、藍色(0,0,255)、白色(255,255,255)、綠色(0,255,0)。

4.輸出圖形

使用p_w_picpathgif()函數(shù)可以將圖形以GIF格式輸出到瀏覽器或文件,p_w_picpath'jpeg()將圖形以JPEG格式輸出,p_w_picpathpng()函數(shù)將圖形以PNG格式輸出。

bool p_w_picpathpng(resource $p_w_picpath[,string $filename])

bool p_w_picpathgif(resource $p_w_picpath[,string $filename])

bool p_w_picpathjpeg(resource $p_w_picpath[,string $filename[,int $quality]])

$p_w_picpath是已經(jīng)創(chuàng)建的圖像句柄,如果不提供參數(shù)$filename,則直接輸出原始圖形。如果提供參數(shù)$filename,則以$filename為文件名創(chuàng)建一個相應格式的圖片,保存以后Web頁面中就可以使用該圖片了。p_w_picpathjpeg()函數(shù)中的可選參數(shù)$quality,范圍從0(最差質(zhì)量,文件最?。┑?00(最佳質(zhì)量,文件最大).

不管輸出什么格式的圖片,都要使用header()函數(shù)向瀏覽器發(fā)送相應的頭信息。如果要輸出GIF格式的圖片應使用:“header("Content-type:p_w_picpath/gif");”;輸出JPEG格式的圖片應使用“header("Content-type:p_w_picpath/jpeg");”;PNG格式使用“header("Content-type:p_w_picpath/png");”。

5.清除資源

為了節(jié)省資源,圖片創(chuàng)建后返回的句柄如果不再使用,就要用p_w_picpathdestory()函數(shù)來釋放與之相關的內(nèi)存。

二、繪制圖形

1.繪制幾何圖形

(1)畫一個點

使用p_w_picpathsetpixel()函數(shù)就可以在已經(jīng)創(chuàng)建的背景圖形上畫一個單一像素,即一個點。

bool p_w_picpathsetpixel(resource $p_w_picpath,int $x,int $y, int $color)

p_w_picpathsetpixel()函數(shù)在已經(jīng)創(chuàng)建的圖形$p_w_picpath上用$color顏色在($x,$y)坐標上畫一個點。起始坐標從左上角開始,坐標為(0,0),到右下角的坐標為($x_size,$y_size),其中$x_size和$y_size是背景圖形的寬和高。

(2)畫一條線段

使用p_w_picpathline()函數(shù)可以畫出一條線段。

bool p_w_picpathline(resource $p_w_picpath ,int $x1 ,$int $y1, int $x2, int $y2,int $color)

p_w_picpathline()函數(shù)可以在已經(jīng)創(chuàng)建的圖形$p_w_picpath上使用$color顏色畫出一條坐標從($x1,$y1)到($x2,$y2)的線段。

(3)畫一個矩形

繪制矩形可以使用p_w_picpathrectangle()函數(shù)來完成。

bool p_w_picpathrectangle(resource $p_w_picpath,int $x1,int $y1,int $x2,int $y2,int $color)

p_w_picpathrectangle()函數(shù)在已經(jīng)創(chuàng)建的圖形$p_w_picpath上使用$color顏色畫出一個矩形,矩形的左上角坐標為($x1,$y1),右上角坐標為($x2,$y2)。

(4)畫一個橢圓

使用p_w_picpathellipse()函數(shù)可以畫一個橢圓。

bool p_w_picpathellipse(resource $p_w_picpath,int $cx,int $cy,int $w,int $h,int $color)

p_w_picpathellipse()函數(shù)在圖形$p_w_picpath上畫一個中心坐標為($cx,$cy)的橢圓。$w和$h分別指定了橢圓的寬度和高度,橢圓線條的顏色由$color指定。當橢圓的寬度和高度相等時,畫出的將是一個圓。

(5)畫一個橢圓弧

創(chuàng)建一個橢圓弧可以使用p_w_picpatharc()函數(shù)

bool p_w_picpatharc(resource $p_w_picpath,int $cx,int $cy,int $w,int $h,int $s,int $e, int $color)

p_w_picpatharc()函數(shù)以坐標($cx,$cy)為中心在圖形$p_w_picpath上畫一個橢圓弧。$w和$h分別指定了橢圓的寬度和高度,當寬度和高度相等時,畫出來的就是圓弧。起始和結(jié)束點用$s和$e參數(shù)以角度指定。0度位于三點鐘位置,以順時針方向繪畫。

(6)畫一個多邊形

使用p_w_picpathpolygon()函數(shù)可以畫出一個多邊形。

bool p_w_picpathpolygon(resource $p_w_picpath,array $points,int $num_points,int $color)

p_w_picpathpolygon()函數(shù)在$p_w_picpath中創(chuàng)建一個多邊形。$points是一個PHP數(shù)組,包含了多邊形的各個頂點坐標。即$points[0]=x0,$points[1]=y0,$points[2]=x1,$points[3]=y1,以此類推。$num_points是頂點的總數(shù)。

2.輸出文本

(1)輸出一個字符

使用p_w_picpathchar()函數(shù)可以在圖形上水平輸出一個字符。

bool p_w_picpathchar(resource $p_w_picpath,int $font,int $x,int $y,string $c,int $colot)

函數(shù)用顏色$color將字符$c畫到$p_w_picpath的($x,$y)坐標處(這是字符串左上角坐標)。如果$c是一個字符串,則只輸出第一個字符。$font表示字符串的字體,如果值為1~5中的一個數(shù),則使用內(nèi)置字體,值為5時字體最大,為1時最小。

p_w_picpathup()函數(shù)可以垂直地輸出一個字符,用法與p_w_picpathchar()函數(shù)相同。

(2)輸出字符串

使用p_w_picpathstring()函數(shù)可以在已經(jīng)創(chuàng)建的背景圖形上輸出字符串

bool p_w_picpathstring(resource $p_w_picpath,int $font,int $x,int $y,string $s ,int $color)

函數(shù)用顏色$color將字符串$s畫到$p_w_picpath的($x,$y)坐標處。

p_w_picpathstringup()函數(shù)可以垂直地輸出字符串,用法與p_w_picpathstring()函數(shù)相同.

p_w_picpathstring()函數(shù)不支持中文顯示。

(3)使用指定字體輸出字符串

使用p_w_picpathttftext()函數(shù)可以在輸出字符的同時指定輸出字符所使用的字體,并根據(jù)參數(shù)的不同輸出不同角度的字符串。

array p_w_picpathttftext(resource $p_w_picpath,float $size,float $angle,int $x,int $y,int $color,string $fontfile,string $text)

本函數(shù)使用顏色$color將字符串$text輸出到$p_w_picpath圖形的($x,$y)坐標上,函數(shù)還可以使用$size參數(shù)指定字體的大小,使用$angle參數(shù)指定字體的角度,水平時角度為0,沿逆時針變大。使用$fontfile參數(shù)指定想要使用的TrueType的字體文件,該文件必須是一個有效的字體文件,否則運行時會產(chǎn)生錯誤。

在Windows平臺下,字體文件全部位于C:\\Windows\Fonts目錄中,使用時可以將需要的字體文件復制到工作目錄中,或者直接指定字體文件的位置。

(4)輸出中文文字

中文字符不可以使用p_w_picpathttftext()函數(shù)在圖片中直接輸出,如果要輸出中文字符,需要先使用iconv()函數(shù)對中文字符進行編碼。

string iconv(string $in_charset,string $out_charset,string $str)

參數(shù)$in_chatset是中文字符原來的字符集,$out_charset是編碼后的字符集,$str是需要轉(zhuǎn)換的中文字符串。函數(shù)最后返回編碼后的字符串。這是使用p_w_picpathttftext()函數(shù)就可以在圖片中輸出中文了。

3.繪制帶填充色的幾何圖形

在PHP中可以使用p_w_picpathfill()函數(shù)對某一區(qū)域進行顏色填充。

bool p_w_picpathfill(resource $p_w_picpath,int $x,int $y,int $color)

函數(shù)在$p_w_picpath圖形的坐標($x,$y)處用顏色$color執(zhí)行區(qū)域填充,即與($x,$y)點顏色相同且相鄰的點都會被填充上該顏色。

推薦使用p_w_picpathcreatecolor()函數(shù)來創(chuàng)建圖形。

使用p_w_picpathfill()函數(shù)填充顏色時要計算填充點,這是一件很麻煩的事。PHP可以在畫幾何圖形的時候就將幾何圖形填充為指定顏色。

(1)畫一個矩形并填充

使用p_w_picpathfilledrectangle()函數(shù)可以畫一個矩形,并使用指定顏色填充該矩形。

bool p_w_picpathfilledrectangle(resource $p_w_picpath,int $x1,int $y1,int $x2,int $y2,int $color)

p_w_picpathfilledrectangle()函數(shù)的$color參數(shù)指定的是整個矩形區(qū)域的顏色。

函數(shù)p_w_picpathfilledpolygon()可以畫一個多邊形并填充顏色。

(2)畫一個橢圓并填色

使用p_w_picpathfilledellipse()函數(shù)可以在已經(jīng)創(chuàng)建的圖形上畫一個橢圓,并使用指定顏色進行填充。

bool p_w_picpathfilledellipse(resource $p_w_picpath, int $cx ,int $cy,int $w,int $h, int $color)

(3)畫一個橢圓弧并填色

函數(shù)p_w_picpathfilledarc()函數(shù)可以畫一個橢圓弧并填充顏色。

bool p_w_picpathfilledarc(resource $p_w_picpath,int $cx,int $cy,int $w,int $h,int $s,int $e,int $color,int $style)

在$p_w_picpath中以坐標($cx,$cy)為中心畫一個橢圓弧。如果成功則返回TRUE,失敗則返回FALSE。$w和$h分別指定了橢圓的寬和高,$s和$e參數(shù)以角度指定了起始和結(jié)束點。$style指定了橢圓弧畫出來的效果,值可以是以下幾個:IMG_ARC_PIE(產(chǎn)生圓形邊界)、IMG_ARC_CHORD(用直線連接起始和結(jié)束點)、IMG_ARC_NOFILL(指明弧或弦只有輪廓,不填充)和IMG_ARC_EDGED(用直線將起始和結(jié)束點與中心點相連)。$style的值可以一起使用,不過當IMG_ARC_PIE和IMG_ARC_CHORD一起使用時,只有IMG_ARC_CHORD將起作用。IMG_ARC_EDGED和IMG_ARC_NOFILL一起使用是畫餅狀圖輪廓的好方法。

pi()函數(shù)的作用是返回圓周率的值,cos()函數(shù)和sin()函數(shù)的作用是返回一個弧度的余弦值和正弦值。number_format()函數(shù)的作用是格式化一個浮點數(shù)。

string number_format(float $number[,int $decimals[,string $dec_point[,string $thousands_sep]]])

參數(shù)$number是要格式化的浮點數(shù):參數(shù)$decimals指定返回的小數(shù)的位數(shù),若省略則只返回整數(shù)部分;$dec_point表示小數(shù)點的表示方式,默認值是“.”;參數(shù)$thousands_sep為整數(shù)部分每三位的分隔符號,默認值是“.”。

三、圖形的處理

1.顏色處理

(1)指定顏色填充

使用p_w_picpathfilltoborder()函數(shù)可以為指定點進行顏色填充,如果遇到指定顏色的邊界時,則停止填充。

bool p_w_picpathfilltoborder(resource $p_w_picpath,int $x,int $y,int $border,int $color)

該函數(shù)從坐標($x,$y)開始用$color顏色執(zhí)行區(qū)域填充,知道碰到顏色為$border的邊界為止。邊界內(nèi)的所有顏色都會被填充。

如果指定的邊界色和該點顏色相同,則沒有填充。如果圖像中沒有該邊界色,則整幅圖像都會被填充。

(2)定義透明色

使用p_w_picpathcolorallocatealpha()函數(shù)也可以為指定的圖形分配顏色,還可以設置顏色的透明度。

int p_w_picpathcolorallocatealpha(resource $p_w_picpath, int $red,int $green,int $blue,int $alpha)

$alpha參數(shù)用于設置顏色的透明度,其值從0到127。0表示完全不透明,127表示完全透明。

2.復制圖片的一部分

使用p_w_picpathcopy()函數(shù)能夠復制圖片的一部分到另一個圖片。

bool p_w_picpathcopy(resource $dst_im,resource $src_im,int $dst_x,int $dst_y,int $src_x,int $src_y,int $src_w,int $src_h)

將$src_im中坐標從($src_x,$src_y)開始,寬度為$src_w,高度為$src_h的一部分復制到$dst_im中坐標為($dst_x,$dst_y)的位置上。

3.復制圖片并調(diào)整大小

使用p_w_picpathcopyresized()函數(shù)也可以實現(xiàn)p_w_picpathcopy()函數(shù)的功能,并可以對復制的圖片大小進行調(diào)整。

bool p_w_picpathcopyresized(resource $dst_p_w_picpath,resource $src_p_w_picpath,int $dst_x,int $dst_y,int $src_x,int $src_y,int $dst_w,int $dst_h,int $src_w,int $src_h)

$dst_w和$dst_h這兩個參數(shù)表示將復制的圖片寬度和高度分別調(diào)整為$dst_w和$dst_h,即實現(xiàn)了圖片的縮放功能。

p_w_picpathsx()和p_w_picpathsy()函數(shù)的作用是獲取一個圖像的寬度和高度,他們的參數(shù)是已經(jīng)創(chuàng)建的圖像句柄。

4.旋轉(zhuǎn)圖像

使用p_w_picpathrotate()函數(shù)可以將圖像旋轉(zhuǎn)給定角度

resource p_w_picpathrotate(resource $src_im,float $angle,int $bgd_color[,int $ignore_transparent])

參數(shù)$src_im是給定的圖像,$angle是指定的旋轉(zhuǎn)角度,$bgd_color指定了旋轉(zhuǎn)后沒有覆蓋到的部分的顏色。旋轉(zhuǎn)的中心是圖像的中心,旋轉(zhuǎn)后的圖像會按比例縮小以適合目標圖像的大小,邊緣不會被剪去??蛇x參數(shù)$ignore_transparent若被設為非零值,則透明色會被忽略(否則會被保留)。

四、其他的圖形函數(shù)

1.取得圖形信息

getp_w_picpathsize()函數(shù)可以獲取指定圖形的尺寸、寬度、高度和類型等信息。該函數(shù)將這些信息以數(shù)組的形式返回,如果圖片指定的圖形不是有效的文件,則返回FALSE。

2.設定畫線

使用p_w_picpathsetthickness()函數(shù)可以設置畫幾何圖形時畫線的寬度。

bool p_w_picpathsetthickness(resource $p_w_picpath,int $thickness)

該函數(shù)將畫線寬度設為$thickness個像素。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI