0

GD ライブラリを使用してフォントを表示しようとしています。そこには確かに画像がありますが、何も表示されていないだけです。

PHP:

header('Content-Type: image/png');

$font = $_GET['font'];

// Create the image
$image = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($image, 255, 255, 255);
$grey = imagecolorallocate($image, 128, 128, 128);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, 399, 29, $white);

// The text to draw
$text = 'The Quick Brown Fox Jumps over the Lazy Dog';
$font = '/Aller/' . $font;


// Add the text
imagettftext($image, 20, 0, 10, 20, $black, $font, $text);

imagepng($image);

HTML:

<img src="fontgen.php?font=Aller_Rg.ttf" alt="" />

フォントは fonts/Aller/Aller_Rg.tff にあります

私は何を間違っていますか?

4

2 に答える 2

1

問題は$font変数のようです。ドキュメントから:

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

GD ライブラリの 2.0.18 より前のバージョンを使用する場合、セミコロンではなくスペース文字が、さまざまなフォント ファイルの「パス区切り」として使用されていました。この機能を意図せず使用すると、次の警告メッセージが表示されます。警告: フォントが見つかりません/開くことができませんでした。これらの影響を受けるバージョンの場合、唯一の解決策は、スペースを含まないパスにフォントを移動することです。

多くの場合、フォントがそれを使用するスクリプトと同じディレクトリに存在する場合、次のトリックはインクルードの問題を軽減します。

<?php
// Set the enviroment variable for GD
putenv('GDFONTPATH=' . realpath('.'));

// Name the font to be used (note the lack of the .ttf extension)
$font = 'SomeFont';
?>

また、フォントはfonts/Aller/ディレクトリにあるとも言いました。一方、スクリプトでは、fontsディレクトリへの参照はありません。

于 2013-06-08T04:05:19.497 に答える
0

コードはこの部分を除いてすべて正しいです

$font = '/Aller/' . $font;

「Aller/Aller_Rg.tff」ではなく、絶対パス「/Aller/Aller_Rg.tff」を試行します。

に変更するとうまくいく$font = 'Aller/' . $font;はずです。

また、エラーログを確認する必要があります。Invalid font filename

疑わしい場合はheader('Content-Type: image/png');、デバッグのために削除してください。

于 2013-06-08T04:04:07.007 に答える