2009-09-01 69 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