広く使用されているサーバー側のスクリプト言語として、PHPの内蔵画像処理機能ライブラリGDも、異なるバージョンでいくつかの変更を受けました。この記事では、さまざまなPHPバージョンのImageFontWidth()関数の動作の違いに焦点を当て、開発者が機能を正しく理解して使用し、バージョンの違いによって引き起こされる問題を回避します。
ImageFontWidth()は、指定された内蔵フォント幅を取得するために使用されるPHP GDライブラリの関数です。その定義は次のとおりです。
int imagefontwidth ( int $font )
パラメーター$ font :フォントの数を表します。通常は1〜5の整数であり、GDライブラリに組み込まれた5つの異なるサイズのフォントに対応します。
返品値:フォントの単一文字幅(ピクセル)。
この関数は、主に画像の幅を計算するためにImagestring()またはその他の文字列描画関数に準拠するために使用され、画像の中心およびアライメント効果を容易にします。
PHP 5.x以前では、 ImageFontWidth()は比較的安定して動作し、返された幅は、組み込みのフォントの特定のサイズに対応する定義済みの固定値です。例えば:
<?php
for ($font = 1; $font <= 5; $font++) {
echo "Font $font width: " . imagefontwidth($font) . "\n";
}
?>
出力はほぼ次のとおりです。
Font 1 width: 5
Font 2 width: 6
Font 3 width: 7
Font 4 width: 8
Font 5 width: 9
これは、アンチエイリアスとスケーリングなしで、フォントサイズが固定されたImageFonteight()で動作します。
PHP 7.xバージョンはGDライブラリにいくつかの根本的な最適化を行いましたが、 ImageFontWidth()の動作は基本的に一貫しています。事前定義された幅を返し、組み込みのフォント番号1〜5のみがサポートされています。
ただし、GDライブラリバージョンが古すぎたり互換性がない場合、エラーを引き起こしたり、値を返したりする可能性があることに注意してください。 GDライブラリとPHPバージョンのアップグレードを同期させることをお勧めします。
PHP 8.Xは、この関数の実装を根本的に変更することなく、 ImageFontWidth()のサポートを維持し続けています。ただし、PHP 8はより厳格なタイプのチェックを強調し、非整数パラメーターが渡されるとタイプエラーがスローされます。例えば:
<?php
echo imagefontwidth("3"); // エラーが発生します
?>
着信$フォントパラメーターが整数であることを確認する必要があります。
さらに、PHP 8.Xは、より多くの画像形式のサポートやパフォーマンスの向上など、GDライブラリのサポートの強化を提供しますが、 ImageFontWidth()はビルトインフォントにのみ適しています。
ImageFontWidth()は整数1〜5のみを受け入れ、他の値はfalseを返したり、警告をスローしたりします。
<?php
var_dump(imagefontwidth(6)); // bool(false)
?>
したがって、必ず法的なフォント番号を渡してください。
ImageFontWidth()は、 GDライブラリに組み込まれたフォントでのみ動作します。 ImageTtftext()などの関数を使用してカスタムフォントをロードする場合、 YimageFontWidth()を使用して幅を取得することはできません。 imagettfbbox()など、他の方法でテキスト幅を計算する必要があります。
異なるオペレーティングシステムでのGDライブラリの実装の違いにより、まれな場合にはフォント幅の値がわずかに異なる場合がありますが、一般的に全体的なレイアウトには影響しません。
ImageFontWidth()を使用して文字列の幅を計算し、中央に表示する方法を示す簡単な例を次に示します。
<?php
header('Content-Type: image/png');
$img_width = 200;
$img_height = 50;
$image = imagecreatetruecolor($img_width, $img_height);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
$text = "Hello PHP";
$font = 3;
$font_width = imagefontwidth($font);
$text_width = strlen($text) * $font_width;
$x = ($img_width - $text_width) / 2;
$y = ($img_height - imagefontheight($font)) / 2;
imagestring($image, $font, $x, $y, $text, $black);
imagepng($image);
imagedestroy($image);
?>
ここでは、ImageFontWidth()とImageFontheIght()を使用して、テキストの水平および垂直の中心を実現するために、文字列の総幅と高さを計算します。
バージョン | 主な動作 | 注意すべきこと |
---|---|---|
Php 5.x | 固定フォント幅、安定、サポートフォント番号1-5に戻る | 大きな変更はありません |
Php 7.x | 基本的に変更はありません。根本的な最適化が必要です。GDライブラリは調整されています | エラーを避けるために、GDライブラリを更新してください |
Php 8.x | 機能を互換性のあるものに保つための拡張型チェック | パラメーターは整数でなければならず、エラーはより明白です |
ImageFontWidth()は、GD画像処理の基本的で単純な関数です。目立たないように見えますが、その合理的な使用は、特にバージョン全体で開発し、互換性に注意を払う必要がある場合、開発者がテキスト描画効果をより正確に制御するのに役立ちます。
使用中にバージョンの互換性の問題が発生した場合は、GDライブラリバージョンとPHPバージョンが最初に一致することを確認し、違法なパラメーターを通過しないように公式ドキュメンテーション仕様に厳密に準拠してImageFontWidth()を使用することをお勧めします。
// URL使用の例 m66.net 交換ドメイン名のデモンストレーション
$url = "https://m66.net/example/path";
echo "<a href=\"$url\">クリックして例にアクセスします</a>";