PHP中創(chuàng)建圖像并繪制文字的例子
在圖像中顯示的文字也需要按坐標(biāo)位置畫上去。在PHP中不僅支持比較多的字體庫,而且提供了非常靈活的文字繪制方法。例如,在圖中繪制縮放、傾斜、旋轉(zhuǎn)的文字等??梢允褂胕mageString()、imageStringUP()或imageChar()等函數(shù)使用的字體文字繪制到圖像中。這些函數(shù)的原型如下所示:
bool imagestring(resource $image,int $font,int $x ,int $y,string $s,int $color) //水平地畫一行字符串
bool imagestringup(resource $image,int $font,int $x ,int $y,string $s,int $color) //垂直地畫一行字符串
bool imagechar(resource $image,int $font,int $x ,int $y,char $c,int $color) //水平地畫一個字符
bool imagecharup(resource $image,int $font,int $x ,int $y,char $c,int $color) //垂直地畫一個字符
在上面列出來的四個函數(shù)中,前兩個函數(shù)imageString()和imageStringUP()分別用來向圖像中水平和垂直輸出一行字符串,而后兩個函數(shù)imageChar()和imageCharUP()分別用來向圖像中水平和垂直輸出一個字符。雖然這四個函數(shù)有所差異,但調(diào)用方式類似。它們都是在$image圖像中繪制由第五個參數(shù)指定的字符,繪制的位置都是從坐標(biāo)($x,$y)開始輸出。如果是水平地面畫一行字符串則是從左向右輸出,而垂直地畫一行字符串則是從下而上輸出。這些函數(shù)都可以通過最后一個參數(shù)$color給出文字的顏色。第二個參數(shù)$font則給出了文字字體標(biāo)識符,其值為整數(shù)1、2、3、4或5,則是使用內(nèi)置的字體,數(shù)字越大則輸出的文字尺寸就越大。下面是在一個圖像中輸出文字的示例:
<?php
$im = imagecreate(150, 150);
$bg = imagecolorallocate($im, 255, 255, 255); //設(shè)置畫布的背景為白色
$black = imagecolorallocate($im, 0, 0, 0); //設(shè)置一個顏色變量為黑色
$string = "LAMPBrother"; //在圖像中輸出的字符
imagestring($im, 3, 28, 70, $string, $black); //水平的將字符串輸出到圖像中
imagestringup($im, 3, 59, 115, $string, $black); //垂直由下而上輸?shù)綀D像中
for($i=0,$j=strlen($string);$i<strlen($string);$i++,$j--){ //循環(huán)單個字符輸出到圖像中
imagechar($im, 3, 10*($i+1),10*($j+2),$string[$i],$black); //向下傾斜輸出每個字符
imagecharup($im, 3, 10*($i+1),10*($j+2),$string[$i],$black); //向上傾斜輸出每個字符
}
header('Content-type:image/png');
imagepng($im);
?>
通過上面介紹的四個函數(shù)輸出內(nèi)置的字體外,還可以使用imageTtfText()函數(shù),輸出一種可以縮放的與設(shè)備無關(guān)的TrueType字體。TrueType是用數(shù)學(xué)函數(shù)描述字體輪廓外形,即可以用做打印字體,又可以用作屏幕顯示,各種操作系統(tǒng)都可以兼容這種字體。由于它是由指令對字形進(jìn)行描述,因此它與分辨率無關(guān),輸出時(shí)總是按照打印機(jī)的分辨率輸出。無論放大或是縮小,字體總是光滑的,不會有鋸齒出現(xiàn)。例如在Windows系統(tǒng)中,字體庫所在的文件夾C:\WINDOWS\Fonts下,對TrueType字體都有標(biāo)注,如simsun.ttf為TrueType字體中的“宋體”。imageTtfText()函數(shù)的原型如下所示:
array imagettftext(resource $image,float $size ,float $angle,int $x,int $y,int $color ,string $fontfile,string $text)
該函數(shù)需要多個參數(shù),其中參數(shù)$image需要提供一個圖像資源。參數(shù)$size用來設(shè)置字體大小,根據(jù)GD庫版本不同,應(yīng)該以像素大小指定(GD1)或點(diǎn)大小(GD2)。參數(shù)$angle是角度制表示的角度,0º為從左向右讀的文本,更高數(shù)值表示逆時(shí)針旋轉(zhuǎn)。例如90º表示從下向上讀的文本。并由($x,$y)兩個參數(shù)所表示的坐標(biāo),定義了一個字符的基本點(diǎn),大概是字符的左下角。而這和imagestring()函數(shù)有所不同,其($x,$y)坐標(biāo)定義了第一個字符的左上角。參數(shù)$color指定顏色索引。使用負(fù)的顏色索引值具有關(guān)閉防鋸齒的效果。參見$fontfile是想要使用的TrueType字體的路徑。根據(jù)PHP所使用的GD庫的不同,當(dāng)fontfil沒有以“/”開頭時(shí)則“.ttf”將被加到文件名之后,并且會在庫定義字體路徑中嘗試搜索該文件名。最后一個參數(shù)$text指定需要輸出的文本字符串,可以包含十進(jìn)制數(shù)字化字符表示(形式為:€)來訪問字體中超過位置127的字符。UTF-8編碼的字符串可以直接傳遞。如果字符串中使用的某個字符不被字體支持,一個空心矩形將替換該字符。
imagettftext()函數(shù)返回一個含有8個單元的數(shù)組,表示了文本外框的四個角,順序?yàn)樽笙陆?,右下角,右上角,左上角。這些點(diǎn)是相對于文本的而和角度無關(guān),因此“左上角”指的是以水瓶方向看文字時(shí)其左上角。我們通過在下例中的腳本,生成一個白色的400X30像素的PNG圖片,其中有黑色(帶灰色陰影)“宋體”字體寫的“回憶經(jīng)典!”代碼如下所示:
<?php
$im = imagecreatetruecolor(400, 30); //創(chuàng)建400 30像素大小的畫布
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white); //輸出一個使用白色填充的矩形作為背景
//如果有中文輸出,需要將其轉(zhuǎn)碼,轉(zhuǎn)換為UTF-8的字符串才可以直接傳遞
$text = iconv("GB2312", "UTF-8", "回憶經(jīng)典");
//設(shè)定字體,將系統(tǒng)中與simsun.ttc對應(yīng)的字體復(fù)制到當(dāng)前目錄下
$font = 'simsun.ttc';
imagettftext($im, 20, 0, 12, 21, $grey, $font, $text); //輸出一個灰色的字符串作為陰影
imagettftext($im, 20, 0, 10, 20, $black, $font, $text); //在陰影上輸出一個黑色的字符串
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
相關(guān)文章
php自動給文章加關(guān)鍵詞鏈接的函數(shù)代碼
自動給文章加關(guān)鍵詞鏈接的php函數(shù)代碼,需要的朋友可以參考下2012-11-11php實(shí)現(xiàn)漢字驗(yàn)證碼和算式驗(yàn)證碼的方法
這篇文章主要介紹了php實(shí)現(xiàn)漢字驗(yàn)證碼和算式驗(yàn)證碼的方法,實(shí)例分析了算式驗(yàn)證碼及中文漢字驗(yàn)證碼的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03PHP獲取時(shí)間戳等相關(guān)函數(shù)匯總
PHP是一種廣泛使用的服務(wù)器端腳本語言,具有豐富的時(shí)間戳相關(guān)函數(shù)。本文介紹了PHP中獲取時(shí)間戳的常用函數(shù),包括time()、strtotime()、date()等,并提供了使用示例。同時(shí),還介紹了PHP中其他與時(shí)間相關(guān)的函數(shù),如mktime()、microtime()等。2023-06-06PHP+Javascript實(shí)現(xiàn)在線拍照功能實(shí)例
這篇文章主要介紹了PHP+Javascript實(shí)現(xiàn)在線拍照功能的方法,涉及javascript插件的使用及php圖片上傳的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07PHP統(tǒng)計(jì)目錄大小的自定義函數(shù)分享
這篇文章主要介紹了PHP統(tǒng)計(jì)目錄大小的自定義函數(shù)分享,本文使用遞歸方法統(tǒng)計(jì)一個目錄中所有文件的大小,需要的朋友可以參考下2014-11-11php實(shí)現(xiàn)模擬post請求用法實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)模擬post請求用法,分析了php模擬post請求的三種常見用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07php實(shí)現(xiàn)猴子選大王問題算法實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)猴子選大王問題算法,實(shí)例分析了算法的原理與解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04