imagettftext无法打开字体文件

Jon*_*eig 7 php ubuntu imagettftext

使用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>
Run Code Online (Sandbox Code Playgroud)

我使用发现了一个自定义的字体名为.ttf 这里.我可以在Ubuntu中将文件打开为有效的字体文件.我也尝试了其他字体,结果相同.

我正在使用Ubuntu 10.04 LTS 32位,安装了apache2,php5,freetype6和php5-gd.我还尝试使用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);
?>
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

测试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
Run Code Online (Sandbox Code Playgroud)

Jür*_*len 8

您可以尝试插入:

putenv('GDFONTPATH=' . realpath('.'));
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

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

sudo fc-cache -f -v
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用:putenv('GDFONTPATH ='.realpath('.')); 我使用Ubuntu 12.04服务器并修复了imagettftext()的问题:找不到/打开字体错误信息. (2认同)

Jon*_*eig 0

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