ASSETPATH
画像URIとimagettftextのフォントファイルパスの両方でこの定数を使用していると判断すると、フォントファイルが画像と同じパスに保存されているとしか思えませんか?
そうでない場合、またはそこでファイルを開くことができなかった場合、PHP は の警告をスローしimagettftext(): Invalid font filename
ます。php.ini でdisplay_errorsがOnに設定されている場合(これを確認するには、 phpinfoを確認できます)、これは、エラー メッセージが画像データと共に出力ストリームに送信されることを意味します (つまり、画像データが破損し、ブラウザが表示されなくなります)。画像)。これにより、ヘッダーへの呼び出しの前にエラーが発生するため、ヘッダーの変更も防止されます。
ただし、display_errors がオンになっておらず、PHP が指定したフォントファイルを見つけられなかったり、なんらかの理由 (例: permissions ) でフォントファイルを開くことができなかった場合、結果は空白の 170x60 PNG 画像になります。
コードをローカルでテストすると、TrueType フォント ファイルへの正しい絶対パスを PHP に提供する限り、期待どおりに動作することが証明されます。
たとえば、私のシステムにはいくつかの TrueType フォントが に保存されて/usr/share/fonts/truetype/
いますが、通常は Web ルートにフォント ファイルを保存しないので、Web ルートにはありません。また、私の PHP ユーザーには、このパスから読み取るための十分な権限があることにも注意してください。
ここで、使用したい TrueType フォント ファイルへの正しい絶対パスを PHP に指定すると、コードを使用して次の画像が得られます...
$string = '';
for ($i = 0; $i < 5; $i++) {
// this numbers refer to numbers of the ascii table (lower case)
$string .= chr(rand(97, 122));
}
$image = imagecreatetruecolor(170, 60);
$color = imagecolorallocate($image, 200, 100, 90); // red
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-ExtraLight.ttf', $string);
header("Content-type: image/png");
imagepng($image);

これをさらにデバッグするには、display_errors をオンにし、error_reportingを設定して、画像を生成する PHP スクリプトを実行する-1
必要があります。実際にフォント ファイルに問題がある場合は、これが表示されます。 error_log または display_errors をオンにしてそのスクリプトをテストしているときに表示されるエラー出力に。