PHP | GDで透過背景のテキスト画像を作成する方法

PHP GD,PHP

PHP | GDで透過背景のテキスト画像を作成する方法

PHPのGDライブラリを利用して簡単に透過背景の文字画像を作成する方法の紹介です。

背景透過のテキスト画像
背景透過のテキスト画像

透過背景のテキスト画像を作成するサンプルコード

PHPのGDライブラリで透過背景のテキスト画像を作成するサンプルコードになります。

//テキスト
$text = '透過テキスト画像';

//テキストサイズ
$font_size = 50;

//文字数
$mojisu = mb_strlen($text);

//フォント指定
$font = 'rounded-x-mplus-1c-heavy.ttf';

//画像サイズ調整(文字数*文字サイズ*余白加味)
$w = $mojisu * $font_size * 1.37;
$h = $font_size * 1.7;

//ベース画像作成
$img = imagecreatetruecolor($w, $h);

//文字色
$font_color = ImageColorAllocate($img, 255, 99, 71);

//ベース画像の背景色-透過処理
$bg_color = imagecolorallocatealpha($img, 255, 255, 255, 100);
imagealphablending($img, true);
imagesavealpha($img, true);
imagefill($img, 0, 0, $bg_color);

//テキスト書き出し
ImageTTFText($img, $font_size, 0, $font_size * 0.1, $font_size * 1.3, $font_color, $font, $text);

//画像の表示
header('Content-Type: image/jpeg');
imagepng($img);

//画像として指定パスに保存
// imagepng($img, 'sample.png');
// imagejpeg($img, 'sample.jpg');
// imagegif($img, 'sample.gif');
// imagewebp($img, 'sample.webp');

//画像データをメモリから削除
imagedestroy($img);

imagecolorallocatealpha()について

imagecolorallocatealpha()は、imagecolorallocate()に透過度オプションが適用されているものになります。

imagecolorallocatealpha(対象の画像データ, 255, 255, 255, 透過レベル);

imagecolorallocate()と同じくRGBで画像の色を指定、5つめの引数にて透過レベルを指定します。

透過レベルは0(0%透過)から127(100%透過)で指定しますので、CSSなどでRGBAの透過指定に使う0(100%透過)~1(0%透過)と違うことに注意が必要です。

また、imagecolorallocatealpha()で透過レベルを指定と同時に、imagesavealpha()を画像データに指定する必要があります。
imagealphablending()は、多くの場合不要かもです。

imagecolorallocatealpha(対象の画像データ, 255, 255, 255, 透過レベル);
imagealphablending($img, true);
imagesavealpha($img, true);

文字位置と画像サイズの調整

文字サイズの変更による文字位置と画像サイズの調整はとれていると思いますが、フォントによってはズレが生じると思います。

ズレたりはみ出たりする場合は、以下の部分の1.37や1.7、ImageTTFText()での文字を描画する始点計算を調節して下さい。

//画像サイズ調整(文字数*文字サイズ*余白加味)
$w = $mojisu * $font_size * 1.37;
$h = $font_size * 1.7;

//テキスト書き出し
ImageTTFText($img, $font_size, 0, $font_size * 0.1, $font_size * 1.3, $font_color, $font, $text);

PHP GD,PHP

Posted by Yousuke.U