PHP imagettftext无效的字体文件名。

8

我正在尝试使用imagettftext创建带文本的图像。它提示我:在C:\xampp\htdocs\recentpost.php的第32行上,警告:imagettftext():无效的字体文件名。以下是我用于添加文本的第32行代码:

imagettftext($img, 12, 0, 20, 1, $black, "../fonts/arial.ttf", "News!");

我从C:/Windows/Fonts文件夹中复制了字体,因此这是一个有效的字体。


你尝试过使用完整路径而不是相对路径吗? - FThompson
是的,我有尝试过,但是它给我相同的错误。 - legobear154
请查看imagettftext手册。在$fontfile参数的解释下,它解释说,在某些情况下,如果文件名不以斜杠开头,则“.ttf”将附加到该路径。这可能会导致问题吗? - FThompson
6个回答

22

尝试一些类似于这样的内容:

$font = dirname(__FILE__) . '/arial.ttf';
//OR
$font = dirname(__FILE__) . '/fonts/arial.ttf';    
imagettftext($img, 12, 0, 20, 1, $black, $font, "News!");

这意味着字体必须与文件在同一个文件夹中,对吗?我以前没有使用过dirname(FILE),所以我不确定它的工作原理。 - legobear154
dirname 实际上返回父目录的路径,因此您可以将字体放在 fonts 文件夹中,并像上面提到的那样使用 dirname,但是 fonts 文件夹应该在您的项目文件夹内。 - Sudhir Bastakoti
这是唯一对我有效的方法! - demo7up
这需要一个绝对路径,所以这个答案完美地起作用了。 - Christopher C Okonkwo

1

你尝试过使用吗?

imagettftext($img, 12, 0, 20, 1, $black, "../fonts/arial.TTF", "News!");

使用.TTF而不是.ttf,可以吗?

@Fab,你在Windows上可以同时使用\和/。


另外,您是否尝试将字体从根文件夹中包含进来? - Sebr

1

哦,天啊,我真是太蠢了...现在熬夜写php已经太晚了 :p 我一直试图进入一个不存在的文件夹。正确的代码应该是:

imagettftext($img, 12, 0, 20, 1, $black, "fonts/arial.ttf", "News!");

感谢大家尝试修复我的愚蠢错误 :p


0

尝试使用双斜杠:

imagettftext($img, 12, 0, 20, 1, $black, "..\\fonts\\arial.ttf", "News!");

0

如果您使用的是 Windows,我认为您应该使用 "..\fonts\arial.ttf" 作为路径


刚试了一下,还是不行。我不知道发生了什么事。我有xampp,而且我相信它是最新的版本。我已经尝试了我能想到的所有方法和在网上找到的每一个技巧,但就是无论如何都无法让它工作。虽然现在已经很晚了,而且我已经为此工作了一段时间。 - legobear154

0

我尝试了上面的建议,但都没有对我起作用。

因此,我将添加我使用的方法,以防其他人遇到同样的问题。

我使用了

imagettftext($img, 12, 0, 20, 1, $black, getcwd()."\fonts\\arial.ttf", "News!");

请注意,在“arial.ttf”之前添加的额外反斜杠是为了转义原始字体文件目录中的反斜杠。 getcwd()用于获取当前工作目录。您可以在这里阅读更多信息。
如果您愿意,您可以使用echo getcwd()."\fonts\\arial.ttf"来获取完整目录并将所有反斜杠更改为正斜杠。它仍然可以正常工作。

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