PHPで画像に文字列を合成する方法

目次

スポンサードリンク

PHPのプログラムコードで画像に文字列を合成する方法を解説します。文字列の埋め込みには imagettftext 関数を使用します。imagettftext 関数は指定した text を、 TrueType フォントを使用して画像に書き込みます。

GD(Graphics Library)とは

GDはPHPの画像処理用モジュールです。GIF, PNG, JPEG, WBMP など様々な画像形式に対応しており、画像の作成、編集、保存などの機能を提供します。GDを使用するためにはPHPをコンパイルする際のconfigureオプションでGDを有効にするか、拡張ライブラリとしてGDを設定する必要があります。レンタルサーバーのPHPを利用する場合などは、phpinfo() 関数で自身の環境でGDが利用できるか確認しましょう。

TrueType フォントとは

フォントフォーマットのひとつで、アップル社とマイクロソフト社が共同開発したフォントです。PHPをLinuxサーバーで動作させる場合は、別途フォントをインストールする必要があります。 方法は2種類あって、一つはフォントファイル(.ttfなど)を Windows マシンから Linux マシンにコピーする方法です。msttcorefonts などの TrueType フォント パッケージをインストールする方法もあります。事前に必要なフォントファイルを用意しておきましょう。

画像に文字列を合成するサンプルコード

<?php
// コンテントタイプを設定します
header('Content-Type: image/png');

// 画像を生成します
$im = imagecreatetruecolor(400, 30);

// いくつかの色を生成します
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// 描画する文字列
$text = 'Testing...';
// フォントファイルのパスを指定します
// 今回は検証したLinuxサーバーに元々インストールされていたフォントファイルを指定します
$font = '/usr/share/fonts/open-sans/OpenSans-Bold.ttf';

// テキストを追加します
imagettftext(
        $im, // GdImage オブジェクト
        20,  // フォントサイズ
        0,   // テキストの角度。0度は左から右にテキストを読む方向。 0より大きな値を指定すると反時計回りに回転
        10,  // x座標 左上は0,0
        20,  // y座標
        $black, // 文字の色
        $font,  // フォントファイルの指定
        $text   // テキスト文字列を UTF-8 エンコーディングで表したもの。
);

// imagepng() を使用して imagejpeg() よりもクリアなテキストにします
imagepng($im);
imagedestroy($im);
?>

画像が表示されない場合:BOMの確認

PHPファイルそのものがUTF-8で記述されており、BOM付きでファイル保存されていると、上記サンプルコードを実行しても画像が表示されません。これはBOMと呼ばれる符号が付属することでPNG画像として不正な状態になっているためです。エディタでPHPファイルを開きBOM無しの状態で保存することで画像が表示されるようになるはずです。

PHPを学ぶ際のおすすめ書籍

レベルアップPHP ~言語を理解して中級者へ~
PHPの入門書を読み終えさらなる実力をつけたいエンジニア向けの技術書です。PHPの入門書にはあまり載っていないバージョンアップ方法やパフォーマンスなど、実務に役立つ内容も記載が豊富。30日間の無料体験もできる『Kindle Unlimited』でも読めます。

独習PHP 第4版
PHP の基本から抑えたいときはこちら。解説が詳しい、練習問題で知識の定着も促せる。辞書のような一冊。手元にある安心感。とにかく分厚い。