2

更新: テスト後、TTF ファイルが存在するようです。更新: フォント ファイルの相対パスに変更されました。それでもうまくいきません。

PHP で GD を使用して画像を作成しようとすると、次のエラーが発生します。

[Tue Sep 01 19:44:15 2009] [error] [client IP ADDRESS ] PHP 警告: imagettftext() [function.imagettftext]: /www/vhosts/website.com/htdocs/trial でフォントが見つからない/開くことができませんでした/TextToImage.class.php 38 行目

同じエラーが発生していたので、フォントのパスを変更しました。ファイルをフォルダーにドロップして、フォントをサーバーに追加しました。私は何が欠けていますか?

/**
 * @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);
}
4

3 に答える 3

3

これはおそらく、お使いのバージョンの libgd では不明な形式のフォント ファイルです。phpinfo()
の出力の gd セクションには、FreeType/T1Lib ライブラリのバージョンが含まれている必要があります。どちらですか? そして、何が

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

印刷?

編集:おっと、フォントファイルのタイプを忘れてください。そのエラーはCould not read font. Could not find/open fontそのようなファイルがないか、アクセスできないかのどちらかです。
の出力passthru('file '.$font);は「のみ」CENTURY.TTF: TrueType font dataですか?次に、相対パスを使用しました。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);
于 2009-09-01T20:27:32.137 に答える
1

関数を呼び出す方法である可能性があります-これを関数に追加すると、さらに役立ちます

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

また、フォント パスが絶対パスであり、スラッシュで始まっていないことを確認します。imagettftextのマニュアル ページには次のように記載されています。

PHP が使用している GD ライブラリのバージョンに応じて、fontfile が先頭の / で始まらない場合、ファイル名に .ttf が追加され、ライブラリはライブラリ定義のフォント パスに沿ってそのファイル名を検索しようとします。

于 2009-09-01T20:17:24.217 に答える
0

Web サーバー (Web サーバーを実行するユーザー) には、そのフォルダー/ファイルへの読み取りアクセス権がありますか?

于 2009-09-01T20:17:51.080 に答える