dpkt31779 2009-09-01 20:11
浏览 122
已采纳

PHP GD给出了错误

Update: TTF file seems to be there after testing. Update: changed to a relative path for the font file. Still doesn't work.

I get the following error when I try to make an image using GD through PHP.

[Tue Sep 01 19:44:15 2009] [error] [client IP ADDRESS] PHP Warning: imagettftext() [function.imagettftext]: Could not find/open font in /www/vhosts/website.com/htdocs/trial/TextToImage.class.php on line 38

I changed the path for the font as it was giving me the same error. I added the font to the server by dropping the file into the folder. What am I missing?

/**
 * @name                    : makeImageF
 *
 * Function for create image from text with selected font.
 *
 * @param String $text     : String to convert into the Image.
 * @param String $font     : Font name of the text.
 * @param int    $W        : Width of the Image.
 * @param int    $H        : Hight of the Image.
 * @param int     $X        : x-coordinate of the text into the image.
 * @param int    $Y        : y-coordinate of the text into the image.
 * @param int    $fsize    : Font size of text.
 * @param array  $color       : RGB color array for text color.
 * @param array  $bgcolor  : RGB color array for background.
 *
 */
public function makeImageF($text, $font="/www/vhosts/website.com/htdocs/trial/CENTURY.TTF", $W=200, $H=20, $X=0, $Y=0, $fsize=18, $color=array(0x0,0x0,0x0), $bgcolor=array(0xFF,0xFF,0xFF)){

    $this->im = @imagecreate($W, $H)
        or die("Cannot Initialize new GD image stream");

    $background_color = imagecolorallocate($this->im, $bgcolor[0], $bgcolor[1], $bgcolor[2]);        //RGB color background.
    $text_color = imagecolorallocate($this->im, $color[0], $color[1], $color[2]);            //RGB color text.

    imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text);
}
  • 写回答

3条回答 默认 最新

  • duanche5149 2009-09-01 20:27
    关注

    It's probably a font file in a format unknown to your version of libgd.
    The gd section of the output of phpinfo() should include version of the FreeType/T1Lib library. Which one is it?
    And what does

    echo '<pre>Debug: '; passthru('file '.$font); echo "</pre>
    ";
    // imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text);
    

    print?

    Edit: oops, forget about the the type of the font file. The error for that would be Could not read font. Could not find/open font really means what it says: either there is no such file or it cannot be accessed.
    The output of passthru('file '.$font); is "only" CENTURY.TTF: TrueType font data? Then you've used a relative path. Try passing an absolute path to imagettftext()

    $font_realpath = realpath($font);
    if ( !$font_realpath || !is_file($font_realpath) ) {
      die 'no such font file';
    }
    else if ( !is_readable($font_realpath) ) {
      die 'cannot read font file';
    }
    imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font_realpath, $text);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大