PHP Imagick setFont在web中不起作用,但在控制台中起作用

PHP Imagick setFont在web中不起作用,但在控制台中起作用,php,imagick,Php,Imagick,代码如下: /* Create Imagick objects */ $image = new \Imagick(); $draw = new \ImagickDraw(); $color = new \ImagickPixel('#000000'); $background = new \ImagickPixel('none'); // Transparent /* Font properties */ $draw->setFont("annabelle"); $draw->se

代码如下:
/* Create Imagick objects */
$image = new \Imagick();
$draw = new \ImagickDraw();
$color = new \ImagickPixel('#000000');
$background = new \ImagickPixel('none'); // Transparent

/* Font properties */
$draw->setFont("annabelle");
$draw->setFontSize(80);
$draw->setFillColor($color);
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);

/* Get font metrics */
$metrics = $image->queryFontMetrics($draw, $text);

/* Create text */
$draw->annotation(0, $metrics['ascender'], $text);

/* Create image */
$image->newImage($metrics['textWidth'], $metrics['textHeight'], background);
$image->setImageFormat('png');
$image->drawImage($draw);

/* Save image */
file_put_contents('imagick_test.png', $image);
?>
和ImageMagick配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<typemap>
   <include file="type-dejavu.xml" />
   <include file="type-ghostscript.xml" /> 
   <include file="type-windows.xml" />
   <type name="annabelle" family="annabelle" glyphs="/home/nginx/testing/annabelle.ttf" />
</typemap>
或者使用字体文件,而不是在setFont中使用字体名称,如下所示:

...
/* Font properties */
$draw->setFontFamily("annabelle");
$draw->setFontSize(80);
...
...
/* Font properties */
$draw->setFont("annabelle.ttf");
$draw->setFontSize(80);
...
创建的图像如下所示:

如果我在cosole中运行代码,正确的应该是这样的:
好吧,我得到了答案


我已经将php从5.5升级到了5.6,但是我发现Imagick模块被禁用了,所以我用php_TARGET=php5-6重新出现了Imagick,我正在运行gentoo。但我忘记了重新启动php fpm服务。重新启动服务后,它会正常运行。

这可能是文件权限问题。在Web服务器上运行时,能否检查字体文件是否可被PHP读取。e、 g.类似于echo strlenfile\u get\u contents/home/nginx/testing/annabelle.ttf;它的长度为74144,我通过用户nginx调用php-f test.php命令,该命令用于运行web服务器。