0

我正在尝试使用我在我的网站上上传的字体,但我不断收到此错误:

imagettftext():找不到/打开字体”。

我已经尝试过使用 putenv 工具,但它仍然无法打开文件。Bonfire 上是否有一个选项可以限制可以使用的文件类型?我可以使用 imagestring 函数,但我想要其他字体。

我能够在 HTML 文件中加载字体,所以看起来它与imagettftext().

    $image = imagecreatefrompng('/home/dev3/public_html/themes/admin/images/countdown.png');
    $font = array(
        'size'=>40,
        'angle'=>0,
        'x-offset'=>10,
        'y-offset'=>70,
        'file'=>'/home/dev3/public_html/fonts/DIGITALDREAM.ttf',
        'color'=>imagecolorallocate($image, 255, 255, 255),
    );

            $image = imagecreatefrompng('/home/dev3/public_html/themes/admin/images/countdown.png');
            // Open the first source image and add the text.
            $text = $interval->format('%a:%H:%I:%S');
            if(preg_match('/^[0-9]\:/', $text)){
                $text = '0'.$text;
            }
            $text,$font['color']);
            putenv('GDFONTPATH=' . realpath('.'));
            imagettftext ($image , $font['size'] , $font['angle'] , $font['x-offset'] , $font['y-offset'] , $font['color'],$font['file'] ,$text);

            ob_start();
            imagegif($image);
            ob_end_clean();

    $gif = new AnimatedGif($frames,$delays,$loops);
    $gif->display();
4

1 回答 1

1

GD / FreeType 字体加载代码仅限于本地文件系统。您的代码正在尝试从 HTTP URL 读取字体:

$font = array(...
   'file'=>'https://dev3.successengineapps.com/fonts/DIGITALDREAM.ttf'
...);

GD 中的字体加载代码不知道如何发出 HTTP 请求。

这是获得某种输出所需的最小代码集的示例;也就是说,我没有尝试以任何方式对您的代码进行认真的重写,但也删除了与问题没有明显直接关系的任何内容:

<?php
header('Content-Type: image/gif');
$image = imagecreatefrompng('https://dev3.successengineapps.com/themes/admin/images/countdown.png');
    $font = array(
        'size'=>40,
        'angle'=>0,
        'x-offset'=>10,
        'y-offset'=>70,
        'file'=>'./DIGITALDREAM.ttf',
        'color'=>imagecolorallocate($image, 255, 255, 255),
    );
$text = "Hello, world.";
if (imagettftext ($image , $font['size'] , $font['angle'] , $font['x-offset'] , $font['y-offset'] , $font['color'],$font['file'] ,$text)) {
        imagegif($image);
} else {
        var_dump($php_errormsg);
}

此代码的输出在此处可见:

GD代码

我的建议是从这个开始,看看你是否可以获得有效的输出,然后慢慢添加额外的代码,直到你有一个有效的解决方案,或者找到破坏它的地方。

于 2014-10-08T22:24:04.517 回答