PHPでは、一般的に使用されるGDライブラリは、動的に画像を生成するのに役立つ豊富な機能を提供します。この記事では、ImageFontWidth()とImageCopy()関数の組み合わせを使用して、テキストマップ効果を実現する方法に焦点を当てています。いわゆるテキストマップは、テキストを小片またはマップに「カット」し、ターゲット画像にスプライスして、より柔軟なテキスト式フォームを実現することです。
ImageFontWidth(int $ font):int
組み込みのフォント文字幅を返し、$ fontはフォントサイズの識別で、値1-5です。この関数は、テキストの幅を決定するのに役立ち、スプライシング位置の計算を容易にします。
ImageCopy(リソース$ DST_IM、リソース$ src_im、int $ dst_x、int $ dst_y、int $ src_x、int $ src_y、int $ src_y、int $ src_w、int $ src_h):bool
ソース画像の領域をターゲット画像の指定された場所にコピーします。個々の文字をコピーして貼り付けたり、テキストパーツを切ったりするために使用できます。
必要なテキストを含むソース画像を準備します(通常、テキストは小さな画像に書かれています)。
フォントの幅と文字の数に応じて、文字ごとのチャンクはソース画像から取得されます。
文字ブロックをターゲット画像の指定された位置にコピーして、ImageCopy()関数を介して順番にコピーします。
位置パラメーターを調整して、一貫したテキストマップ効果を実現します。
<?php
// ターゲット画像を作成します(白い背景)
$dst_width = 300;
$dst_height = 50;
$dst_im = imagecreatetruecolor($dst_width, $dst_height);
$white = imagecolorallocate($dst_im, 255, 255, 255);
imagefill($dst_im, 0, 0, $white);
// ソースマップ,それがテキストであると仮定します"HELLO"投稿,幅と高さは各文字の幅です*文字番号と文字の高さ
// それを使用する場合、完全なテキストを含む画像リソースを準備する必要があります。
$src_im = imagecreatefrompng('http://m66.net/images/letters.png');
// フォントサイズを設定します(内蔵フォント,1-5)
$font = 5;
$char_width = imagefontwidth($font);
$char_height = imagefontheight($font);
// 投稿するテキスト
$text = "HELLO";
$len = strlen($text);
// テキストの開始位置を計算します,テキストを中央に配置します
$start_x = ($dst_width - $char_width * $len) / 2;
$start_y = ($dst_height - $char_height) / 2;
// 文字ごとのコピー
for ($i = 0; $i < $len; $i++) {
$char = $text[$i];
// ASCIIオフセット,假设ソースマップ文字排列是从'A'継続的にアレンジを開始します
$offset = ord($char) - ord('A');
$src_x = $offset * $char_width;
$src_y = 0;
// ターゲットグラフに単一の文字をコピーします
imagecopy(
$dst_im,
$src_im,
$start_x + $i * $char_width,
$start_y,
$src_x,
$src_y,
$char_width,
$char_height
);
}
// 出力画像
header('Content-Type: image/png');
imagepng($dst_im);
// 無料のリソース
imagedestroy($dst_im);
imagedestroy($src_im);
?>
この例では、テキストマテリアル図( Letter.png )は、文字が水平に配置された文字が順番に配置された写真であり、単一の文字の幅に文字の数とフォントの高さの高さを掛けた状態であることを前提としています。
ImageFontWidth()およびImageFonTheIght()は、文字の幅と高さを正確に取得するのに役立ち、逐語的なコピーを簡単にします。
テキストコンテンツが複雑な場合は、処理する前にImagetTftext()を使用してフォントをレンダリングするか、 ImageCopyResampled()を使用してスケーリングを実現することもできます。
この方法を使用すると、興味深いテキストアニメーションエフェクト、文字フラグメントスタイルのマップ、さらにはカスタム透かしを作成できます。