PHP中建立映像並繪製文字的例子_php技巧

來源:互聯網
上載者:User

在映像中顯示的文字也需要按座標位置畫上去。在PHP中不僅支援比較多的字型庫,而且提供了非常靈活的文字繪製方法。例如,在圖中繪製縮放、傾斜、旋轉的文字等。可以使用imageString()、imageStringUP()或imageChar()等函數使用的字型文字繪製到映像中。這些函數的原型如下所示:

複製代碼 代碼如下:

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)                 //垂直地畫一個字元

在上面列出來的四個函數中,前兩個函數imageString()和imageStringUP()分別用來向映像中水平和垂直輸出一行字串,而後兩個函數imageChar()和imageCharUP()分別用來向映像中水平和垂直輸出一個字元。雖然這四個函數有所差異,但調用方式類似。它們都是在$image映像中繪製由第五個參數指定的字元,繪製的位置都是從座標($x,$y)開始輸出。如果是水平地面畫一行字串則是從左向右輸出,而垂直地畫一行字串則是從下而上輸出。這些函數都可以通過最後一個參數$color給出文字的顏色。第二個參數$font則給出了文字字型標識符,其值為整數1、2、3、4或5,則是使用內建的字型,數字越大則輸出的文字尺寸就越大。下面是在一個映像中輸出文字的樣本:

複製代碼 代碼如下:

<?php
$im = imagecreate(150, 150);
 
$bg = imagecolorallocate($im, 255, 255, 255); //設定畫布的背景為白色
$black = imagecolorallocate($im, 0, 0, 0); //設定一個顏色變數為黑色
 
$string = "LAMPBrother"; //在映像中輸出的字元
 
imagestring($im, 3, 28, 70, $string, $black); //水平的將字串輸出到映像中
imagestringup($im, 3, 59, 115, $string, $black); //垂直由下而上輸到映像中
for($i=0,$j=strlen($string);$i<strlen($string);$i++,$j--){ //迴圈單個字元輸出到映像中
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);
?>

通過上面介紹的四個函數輸出內建的字型外,還可以使用imageTtfText()函數,輸出一種可以縮放的與裝置無關的TrueType字型。TrueType是用數學函數描述字型輪廓外形,即可以用做列印字型,又可以用作螢幕顯示,各種作業系統都可以相容這種字型。由於它是由指令對字形進行描述,因此它與解析度無關,輸出時總是按照印表機的解析度輸出。無論放大或是縮小,字型總是光滑的,不會有鋸齒出現。例如在Windows系統中,字型庫所在的檔案夾C:\WINDOWS\Fonts下,對TrueType字型都有標註,如simsun.ttf為TrueType字型中的“宋體”。imageTtfText()函數的原型如下所示:

複製代碼 代碼如下:

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

該函數需要多個參數,其中參數$image需要提供一個映像資源。參數$size用來設定字型大小,根據GD庫版本不同,應該以像素大小指定(GD1)或點大小(GD2)。參數$angle是角度製表示的角度,0º為從左向右讀的文本,更高數值表示逆時針旋轉。例如90º表示從下向上讀的文本。並由($x,$y)兩個參數所表示的座標,定義了一個字元的基本點,大概是字元的左下角。而這和imagestring()函數有所不同,其($x,$y)座標定義了第一個字元的左上方。參數$color指定色彩索引。使用負的色彩索引值具有關閉防鋸齒的效果。參見$fontfile是想要使用的TrueType字型的路徑。根據PHP所使用的GD庫的不同,當fontfil沒有以“/”開頭時則“.ttf”將被加到檔案名稱之後,並且會在庫定義字型路徑中嘗試搜尋該檔案名稱。最後一個參數$text指定需要輸出的文本字串,可以包含十進位數字化字元表示(形式為:€)來訪問字型中超過位置127的字元。UTF-8編碼的字串可以直接傳遞。如果字串中使用的某個字元不被字型支援,一個空心矩形將替換該字元。

imagettftext()函數返回一個含有8個單元的數組,表示了文本外框的四個角,順序為左下角,右下角,右上方,左上方。這些點是相對於文本的而和角度無關,因此“左上方”指的是以水瓶方向看文字時其左上方。我們通過在下例中的指令碼,產生一個白色的400X30像素的PNG圖片,其中有黑色(帶灰色陰影)“宋體”字型寫的“回憶經典!”代碼如下所示:

複製代碼 代碼如下:

<?php
$im = imagecreatetruecolor(400, 30);            //建立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);       //輸出一個使用白色填充的矩形作為背景
 
//如果有中文輸出,需要將其轉碼,轉換為UTF-8的字串才可以直接傳遞
$text = iconv("GB2312", "UTF-8", "回憶經典");
 
//設定字型,將系統中與simsun.ttc對應的字型複製到目前的目錄下
$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);
 
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.