現在の位置: ホーム> 最新記事一覧> Text描画を画像setpixel()で手動で整列させる

Text描画を画像setpixel()で手動で整列させる

M66 2025-06-05

テキストを描画することは、PHP画像処理拡張GDライブラリで一般的な要件です。通常、 ImageString()またはImagettftext()を使用してテキストを描画しますが、これらの関数はアラインメントとレイアウトがより簡単で、柔軟性が限られています。ピクセルレベル、特にカスタムアラインメントでテキスト位置を正確に制御する場合は、 ImageFontWidth()ImagesEtpixel()を組み合わせて、より細かい粒子のテキスト描画とタイポグラフィを実現できます。

この記事では、これら2つの機能の役割と、それらを使用してテキスト描画の手動での調整を実現する方法を紹介します。


1。ThuldingImageFontWidth()

ImageFontWidth()関数は、指定された内蔵フォントに文字の幅(単位:ピクセル)を取得するために使用されます。 GDライブラリには、いくつかの内蔵フォント(1〜5)が付属しており、各フォントの文字幅と高さが固定されています。

 int imagefontwidth(int $font);
  • パラメーター$ font :フォントサイズ、範囲1〜5。

  • 返品値:フォントの単一文字の幅(ピクセル)。

例えば:

 $font = 3;
$charWidth = imagefontwidth($font);
echo "フォント幅はです $charWidth ピクセル";

この幅を使用すると、テキストのラインを描画するために必要なピクセルの長さを推定してから、アライメントを調整できます。


2。TLUNDSIMAGESETPIXEL()

ImagesetPixel()関数は、指定された画像リソースに単一ピクセルの色値を設定するために使用されます。

 bool imagesetpixel(resource $image, int $x, int $y, int $color);
  • $画像:画像リソース。

  • $ x、$ y :ピクセルポイントの座標。

  • $ COLOR :色インデックスまたはRGBカラー。

これは、ピクセル操作によってテキストの位置をカスタマイズし、さらに正確なテキストレイアウトを実現するために微調整できることを意味します。


3。実装のアイデア:2つを組み合わせて手動のアライメントを実現する

通常、テキストを描画するときは、中央、左、右などのフォントサイズとテキストの長さに応じて全体的な位置を大まかに推定できます。ただし、より細心の調整が必要な場合(個々の文字位置の微調整、ずらしたアレンジメント、特別なグラフィックスの調整など)、 ImageFontWidth()ImagesEtpixel()が役立ちます。

アイデアの例:

  1. ImageFontWidth()を使用して、フォント幅を取得し、テキスト行全体のピクセル幅を計算します。

  2. 要件に基づいてテキストの開始点のx座標を計算します(中央アライメントなど)。

  3. ループを使用して、文字列内の各文字を繰り返し、1つずつ描画します。

    • Imagestring()を使用して、最初に文字を描画します。

    • または、 ImagesSetPixel()を使用して、ポジションを調整するために追加のピクセルを追加するなど、文字を微調整します。

  4. 単一のピクセルを操作することにより、詳細な変位とアライメント効果が達成されます。


4.サンプルコード

次の例では、テキストの描画開始点を手動で計算し、センターアラインメントを達成し、テキストのエッジピクセルをImagesetPixel()で微調整してテキストの視覚効果を強化する方法を示します。

 <?php
// aを作成します 300x100 画像
$img = imagecreatetruecolor(300, 100);

// 背景色を設定します(白)
$white = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $white);

// テキストの色を設定します(黒)
$black = imagecolorallocate($img, 0, 0, 0);

$text = "Hello GD!";
$font = 3; // 内蔵フォント

// 単一の文字幅と高さを取得します
$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);

// テキスト幅を計算します
$textWidth = strlen($text) * $charWidth;

// 計算レベルの中心出発点 X 座標
$startX = (imagesx($img) - $textWidth) / 2;
$startY = (imagesy($img) - $charHeight) / 2;

// 手動逐語描画,微調整を実装します(如错开每个字一个ピクセル)
for ($i = 0; $i < strlen($text); $i++) {
    $char = $text[$i];
    // 各文字の位置を開始します,増加 Y 軸はずらしたオフセット
    $x = $startX + $i * $charWidth;
    $y = $startY + ($i % 2); // 奇妙でずらしてさえ 1 ピクセル

    // 文字を描きます
    imagestring($img, $font, $x, $y, $char, $black);

    // 追加の微調整:使用 imagesetpixel() 给字符右下角加一个ピクセル点,増加视觉效果
    imagesetpixel($img, $x + $charWidth - 1, $y + $charHeight - 1, $black);
}

// 出力画像
header("Content-Type: image/png");
imagepng($img);
imagedestroy($img);
?>

5。概要

  • ImageFontWidth()は、組み込みのフォント幅を理解し、テキストの長さと位置を計算するための重要な関数です。

  • ImagesetPixel()は、より柔軟なテキストの視覚効果を実現するために、図面の完了後に微調整または装飾できます。

  • 2つのテキストレイアウトを組み合わせることで、文字ごとの描画とピクセルごとの操作を通じて正確に制御でき、カスタマイズされたニーズを満たすことができます。

  • この手法は、厳密なアライメント要件と複雑なタイプセットを備えた画像テキストレンダリングシーンに特に適しています。