如何在Linux Mint 17.2下在PHP中使用字体?

时间:2016-05-30 10:42:21

标签: php fonts

我正在尝试一些示例代码,以便试验PHP5-GD libaray。我已经向Google做了几次努力以获得答案,但没有成功。 我在文档根目录下有一个字体:/home//www/tiffanytwolight-regular.ttf(我已经更改了/ var / www / html /中的文档根目录,这是我安装中的默认根目录)。我想绘制条形直方图。 重要的代码片段是:

class SimpleBar {
    private $xgutter = 20; // left/right margin
    private $ygutter = 20; // top/bottom margin
    private $bottomspace = 30; // gap at the bottom
    private $internalgap = 20; // space between bars
    private $cells = array(); // labels/amounts for bar chart
    private $totalwidth; // width of the image
    private $totalheight; // height of the image
    private $font; // the font to use

    function __construct( $width, $height, $font ) {
        $this->totalwidth = $width;
        $this->totalheight = $height;
        $this->font = $font;
    }
}

我没有成功为$ font提供有意义的内容。     $ this->字体多次出现但未设置。 例子:

$box = ImageTTFbBox( $textsize, 0, $this->font, $key );
ImageTTFText( $image, $textsize, 0, ($center-($tw/2)),
    ($this->totalheight-$this->ygutter), $black,
    $this->font, $key );

调用类函数的代码是: 包括(" SimpleBar.class.php&#34);

$graph = new SimpleBar( 500, 300, "tiffanytwolight-regular.ttf" );
$graph->addBar( "USA", 200 );
$graph->addBar( "India", 400 );
$graph->addBar( "UK", 240 );
$graph->addBar( "Australia", 170 );
$graph->addBar( "UAE", 270 );
$graph->draw();

这会产生错误消息(通过ini_set(' display_errors',' on'):

  

(!)警告:imagettfbbox():在第30行的/home/par/www/SimpleBar.class.php中找不到/打开字体

我很感激一些好的提示。

1 个答案:

答案 0 :(得分:0)

GD不需要系统范围的字体。只需将它们存储在项目资源中,然后提供完整路径而不是文件名。来自ImageTTFText() manual page

  

fontfile

     

您希望使用的TrueType字体的路径

     

根据PHP使用的GD库版本,当fontfile不以前导/开头时,将附加.ttf   文件名和库将尝试搜索该文件名   沿着库定义的字体路径。

     

当使用低于2.0.18的GD库版本时,使用空格字符而不是分号作为“路径分隔符”   对于不同的字体文件。无意中使用此功能将   导致警告消息:警告:找不到/打开字体。对于   这些受影响的版本,唯一的解决方案是将字体移动到   不包含空格的路径。

     

在许多情况下,字体与使用它的脚本位于同一目录中,以下技巧将减轻任何包含   问题。

<?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . realpath('.'));

// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont';
?>