imagettftext无法打开字体文件。

7

使用php.net的示例,我收到了一个警告,图像没有正确渲染。我提供了.ttf文件的完整路径,如下所示:/var/www/public/myfont.ttf

PHP Warning:  imagettftext() [<a href='function.imagettftext'>function.imagettftext</a>]: Could not find/open font in <phpfile>

我正在使用一个自定义的.ttf字体,可以在这里找到。在Ubuntu中,我可以打开该文件并作为有效的字体文件使用。我也尝试了其他字体,但结果相同。
我正在使用安装有apache2、php5、freetype6和php5-gd的Ubuntu 10.04 LTS 32位版本。我还尝试对ttf文件进行chmod 777操作,但结果相同。
如何才能使示例代码可以使用自定义的ttf字体文件?
*编辑:我正在使用的代码:
<?php
// File is: /var/www/public/test.php
// Apart from $font variable, it's copy-pasted from php.net

// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$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);

// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = '/var/www/public/UnmaskedBB.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

phpinfo(); 的输出结果:

[gd]
GD Support  enabled
GD Version  2.0
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.3.11
T1Lib Support   enabled
GIF Read Support    enabled
GIF Create Support  enabled
JPEG Support    enabled
libJPEG Version     6b
PNG Support     enabled
libPNG Version  1.2.42
WBMP Support    enabled 

测试 is_fileis_readable

$font = realpath('./').'/UnmaskedBB.ttf';
echo "Font: ".$font; // /var/www/public/UnmaskedBB.ttf
echo "Is file? ".is_file($font); // 1
echo "Is readable? ".is_readable($font); // 1

1
你能展示一下确切的代码吗?我看不出有什么问题,但为了完整起见。 - Pekka
你确定字体的路径是百分之百准确的吗?考虑到大小写敏感性了吗? - Pekka
1
似乎有一个打字错误:tff - Pekka
是的。最初我在使用PHPThumb的wmt过滤器时遇到了问题,PHPThumb会在调用imagettftext之前验证字体文件是否存在并且可读。我可以补充说明的是,imagettfbox也会出现相同的错误。有没有其他好的方法来调试这里发生了什么? - Jon Skarpeteig
@Jon strange. is_readable()is_file() 返回什么? - Pekka
显示剩余3条评论
4个回答

8
您可以尝试插入以下内容:

putenv('GDFONTPATH=' . realpath('.'));

在第一个imagettftext前面,只是为了确保没有路径问题。 更新 如果您使用的是字体缓存(例如fc-cache),请不要忘记刷新它,例如:
sudo fc-cache -f -v

这很不幸地给出了相同的结果。但无论如何,我正在使用静态字体文件,而不是内置的字体文件。 - Jon Skarpeteig
1
遇到了相同的问题,它在我的发行版(Ubuntu 11.10)上有效。 - Salandur
2
这对我有用:putenv('GDFONTPATH=' . realpath('.')); 我正在使用Ubuntu 12.04服务器,它修复了imagettftext()的问题:无法找到/打开字体错误消息。 - Grant

0

尝试将ttf文件移动到与您的php文件相同的目录中,并将$font更改为

$font = 'UnmaskedBB.ttf';

它已经在相同的目录中了,我猜你是指没有带有.ttf后缀的'UnmaskedBB',因为没有前导的/在那里?无论如何 - 相同的警告存在。 - Jon Skarpeteig
是的,我就是这个意思,就像你所想的那样... 你能试着更新一下你的GD库吗?我的是捆绑的(2.0.34兼容),并且工作正常。 - T1000

0

升级发行版,包括所有的php软件包,解决了这个问题。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接