2009-09-01 66 views
2

更新:測試後TTF文件似乎在那裏。 更新:更改爲字體文件的相對路徑。仍然不起作用。PHP GD給出錯誤

當我嘗試使用GD通過PHP製作圖像時,出現以下錯誤。

[週二01九月19時44分15秒2009] [錯誤] [客戶端IP 地址] PHP的警告: imagettftext()[function.imagettftext]: 找不到/打開字體在 /www/vhosts/website.com/htdocs/trial/TextToImage.class.php 上線38

我改變了路徑,因爲它是給我同樣的錯誤的字體。我通過將文件放入文件夾來將字體添加到服務器。我錯過了什麼?

/** 
* @name     : makeImageF 
* 
* Function for create image from text with selected font. 
* 
* @param String $text  : String to convert into the Image. 
* @param String $font  : Font name of the text. 
* @param int $W  : Width of the Image. 
* @param int $H  : Hight of the Image. 
* @param int  $X  : x-coordinate of the text into the image. 
* @param int $Y  : y-coordinate of the text into the image. 
* @param int $fsize : Font size of text. 
* @param array $color  : RGB color array for text color. 
* @param array $bgcolor : RGB color array for background. 
* 
*/ 
public function makeImageF($text, $font="/www/vhosts/website.com/htdocs/trial/CENTURY.TTF", $W=200, $H=20, $X=0, $Y=0, $fsize=18, $color=array(0x0,0x0,0x0), $bgcolor=array(0xFF,0xFF,0xFF)){ 

    $this->im = @imagecreate($W, $H) 
     or die("Cannot Initialize new GD image stream"); 

    $background_color = imagecolorallocate($this->im, $bgcolor[0], $bgcolor[1], $bgcolor[2]);  //RGB color background. 
    $text_color = imagecolorallocate($this->im, $color[0], $color[1], $color[2]);   //RGB color text. 

    imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text); 
} 
+0

你試過把字體與類/索引文件,並通過相對路徑使用它,只是爲了調試? – 2009-09-01 20:36:19

回答

3

這可能是一個字體文件,其格式對於您的libgd版本是未知的。
phpinfo()輸出的gd部分應包含FreeType/T1Lib庫的版本。哪一個?
又是什麼

echo '<pre>Debug: '; passthru('file '.$font); echo "</pre>\n"; 
// imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text); 

打印?

編輯:哎呀,忘了字體文件的類型。錯誤是Could not read fontCould not find/open font真的意味着它說:無論是沒有這樣的文件或無法訪問。
passthru('file '.$font);的輸出是「僅」CENTURY.TTF: TrueType font data?然後你使用了一個相對路徑。嘗試傳遞一個絕對路徑imagettftext()

$font_realpath = realpath($font); 
if (!$font_realpath || !is_file($font_realpath)) { 
    die 'no such font file'; 
} 
else if (!is_readable($font_realpath)) { 
    die 'cannot read font file'; 
} 
imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font_realpath, $text); 
+0

下面是來自phpinfo文件的GD部分的所有內容。所以Freetype是2.2.1。 phpinfo頁面上根本沒有t1lib。 GD支持\t啓用 GD版本\t捆綁(2.0.28兼容) FreeType的支持\t啓用 FreeType的聯動\t對於FreeType 的FreeType版本2.2.1 \t GIF 讀取支持\t啓用 GIF創造支持\t啓用 支持JPG \t已啓用 PNG支持\t已啓用 WBMP支持\t已啓用 XBM支持\t已啓用 – Joe 2009-09-01 20:57:04

+0

好吧,檢查字體文件的類型。 – VolkerK 2009-09-01 20:59:10

+0

調試:CENTURY.TTF:TrueType字體數據我必須註釋掉img.php文件的其餘部分以使其起作用。如果這很重要。 – Joe 2009-09-01 21:09:05

1

它可能是你調用的函數的方式 - 這增加了功能,以幫助您進一步

if (!file_exists($font)) 
    die("Font not found ($font)"); 
if (!is_readable($font)) 
    die("Font exists but not readable ($font)"); 

同時檢查字體路徑是絕對的,不以斜線開始,對於imagettftext狀態

根據其GD 庫PHP的版本使用,當fontfile 不以領先/ 01,然後開始手冊.ttf將被追加到文件名 ,並且該庫將嘗試在 庫定義的字體路徑中搜索該文件名的 。

+0

+1爲淘汰的過程。 – 2009-09-01 20:17:47

+0

試過這個,它通過了這兩個。沒有錯誤顯示。 – Joe 2009-09-01 20:25:49

0

Web服務器(運行Web服務器的用戶)是否可以讀取該文件夾/文件?

+0

有沒有很好的測試方法?我可以在線瀏覽字體文件並從我的服務器上下載。我會假設這會讓你的答案是肯定的。 – Joe 2009-09-01 20:27:50

+0

Paul Dixon的答案是file_exists + is_readable,它應該測試文件的存在性和可讀性。 – 2009-09-01 20:32:25