0

我正在尝试制作验证码。为此,我需要创建一个图像。我正在关注 Nettuts 的本教程。要创建它,我需要使用函数 imagettftext()。但是每当我尝试运行它时,它都会给我一个错误提示

imagettftext():字体文件名无效

我的代码如下。

<?php
    session_start();  

    $string = '';  

    for ($i = 0; $i < 5; $i++) {  
        $string .= chr(rand(97, 122));  
    }  

    $_SESSION['random_code'] = $string;

    $dir = base_url('assets/fonts/asman.ttf');

    $image = imagecreatetruecolor(170, 60);  
    $color = imagecolorallocate($image, 200, 100, 90);
    $white = imagecolorallocate($image, 255, 255, 255);

    imagefilledrectangle($image, 0, 0, 200, 100, $white);  
    imagettftext($image, 30, 0, 10, 40, $color, $dir, $_SESSION['random_code']);
?>

以防万一,我正在使用 CodeIgniter 框架,但我不想使用 CI 验证码库。

4

3 回答 3

1

php 手册

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

您不应为此使用 url 路径(另请注意,您的 url 不以 开头/

我建议在指定字体文件时使用绝对文件系统路径:

$dir = '/full/path/to/assets/fonts/asman.ttf';
imagettftext($image, 30, 0, 10, 40, $color, $dir, $_SESSION['random_code']);

我确信 CI 有一些功能可以返回应用程序路径,您可以从中引用正确的文件。

于 2013-09-07T20:08:54.347 回答
1

你可以试试这个代码它对我有用

   $dir = realpath('assets/fonts/asman.ttf');
于 2019-07-09T18:21:19.433 回答
0

我有类似的问题 - 使用 realpath() PHP 函数解决了它。

前 :

imagettftext($img,$font_size,0,5,5,$color_text,'../fonts/courgetteregular.ttf',$captcha_string);

后 :

$font = realpath("../fonts/courgetteregular.ttf"); imagettftext($img,$font_size,0,5,CAPTCHA_HEIGHT - 10,$color_text,$font,$captcha_string);

此外,对 header('image/png') 进行评论将有助于故障排除。

于 2020-03-17T03:42:05.133 回答