图像文本无法打开字体文件


imagettftext cannot open font file

使用 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 中将文件作为有效的字体文件正常打开。我还尝试了其他字体,结果相同。

我使用的是 Ubuntu 10.04 LTS 32 位,安装了 apache2、php5、freetype6 和 php5-gd。我还尝试使用 ttf 文件对 777 文件和文件夹进行 chmod,结果相同。

如何使用自定义 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

您可以尝试插入:

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

在第一个imagettftext前面,只是为了确保它没有路径问题。

更新

如果您使用的是字体缓存,例如 fc-cache ,不要忘记刷新它,例如:

sudo fc-cache -f -v

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

$font = 'UnmaskedBB.ttf';

升级发行版,包括所有 php 包解决了问题

https://www.php.net/manual/en/function.imagettftext.php

注意:仅当PHP编译时支持freetype(--with-freetype-dir=DIR)时,此函数才可用

sudo apt-get install freetype*