PHP GD hatası veriyor

3 Cevap php

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

Ben PHP ile GD kullanarak bir resim yapmak çalıştığımda aşağıdaki hatayı alıyorum.

[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

Bana aynı hatayı veriyordu gibi ben yazı için yolunu değiştirdi. Ben klasörüne dosyayı bırakarak sunucuya yazı ekledi. Ne eksik?

/**
 * @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 Cevap

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>\n";
// imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text);

yazdırabilir?

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);

Size daha fazla yardımcı işlevi için bu eklemek - Bu işlevi aradığınız bir yol olabilir

if (!file_exists($font))
    die("Font not found ($font)");
if (!is_readable($font))
    die("Font exists but not readable ($font)");

Ayrıca font yolu mutlak ve bir bölü, imagettftext devletler için manuel sayfası ile başlamıyor kontrol

Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.

Web sunucusu (web sunucusunu çalıştıran kullanıcı) bu klasör / dosyaya okuma erişimi var mı?