画像処理にPHPを使用する場合、問題に直面することがあります。文字の幅に応じてテキストを適切に配置して、透明な構造を持つ視覚的インフォグラフィックを形成する方法は?これは、文字統計の作成、版類分析、モノスペースフォントの下のテキストビューなど、文字の実際の表示幅に基づいて正確なレイアウトが必要なシナリオで特に重要です。
PHPのGDライブラリは、ImageFontWidth()が指定されたフォントに文字の幅を取得するための実用的な関数である画像操作をサポートするための基本的で強力な関数を提供します。この記事では、この関数に焦点を当て、PHPおよびGDライブラリを使用して文字幅に基づいて視覚情報レイアウトを作成する方法を示します。
ImageFontWidth()の関数プロトタイプは次のとおりです。
int imagefontwidth(int $font);
この関数は、フォントサイズ(GDライブラリでサポートされている内蔵フォントサイズは1〜5)を取り、フォント内の文字のピクセル幅を返します。 ImageFonTheIght()を使用して、フォントの高さを取得します。
例:
$width = imagefontwidth(3); // フォントサイズを取得します 3 文字幅
$height = imagefontheight(3);
これは、画像内の文字の配置をその後の計算に計算するために重要です。
例を想像してみてください。モノスペースフォントで占められている幅に応じて各文字を画像に描画したいテキストデータがあり、文字の間に均一な間隔を残し、各文字の位置インデックスをマークします。
imageFontWidth()を使用して文字幅に基づいてレイアウト図を描画する方法を示すサンプルコードを次に示します。
<?php
// テキストデータ
$text = "PHP視覚化";
// フォントサイズを使用します
$font = 4;
// 文字の幅と高さを計算します
$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);
// 画像サイズ(各文字の幅 + 間隔 * 文字数 + padding)
$charSpacing = 5;
$padding = 20;
$imageWidth = strlen($text) * ($charWidth + $charSpacing) + $padding * 2;
$imageHeight = $charHeight + $padding * 2;
// 画像リソースを作成します
$image = imagecreate($imageWidth, $imageHeight);
// カラー設定
$background = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
$lineColor = imagecolorallocate($image, 180, 180, 180);
// 文字を描きます
for ($i = 0; $i < strlen($text); $i++) {
$x = $padding + $i * ($charWidth + $charSpacing);
$y = $padding;
// 参照線を描きます
imageline($image, $x, 0, $x, $imageHeight, $lineColor);
// 文字を描きます
imagestring($image, $font, $x, $y, $text[$i], $textColor);
}
// 出力画像
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
上記のコードをVisualize.phpとして保存し、GDライブラリをサポートするPHP環境に展開します。たとえば、 http://m66.net/visualize.phpに入れて、アクセスして出力画像を表示します。
文字描画に加えて、文字の下部にインデックス番号を追加し、各文字または色の頻度を数えて、異なる文字タイプを区別することもできます。さらに、各行をデータセットとして描画すると、チャートのような文字ヒートマップを生成することもできます。