今回は画像に文字列を重ねる方法です。
画像に画像を重ねるならイメージなんとなくイメージできますが、文字列を画像内に挿入??そんなこと出来るの?!って僕は最初思いました。
結果を言うとimagettftext()という便利な関数がPHPに用意されているのでそれを使えば簡単にできます。
サンプルコードを用意したのでそれで解説します。
PHPで画像に文字を重ねる方法
上でも説明しましたが、画像に文字を挿入して新しい画像を作成するにはimagettftext()を使います。
サンプルコードの仕様
blue.jpgというただ青いだけの画像を用意しました。この画像に文字を挿入します。
追加する文字はなんでもいいですが、
こんにちは!
世界!
という文字を白色で挿入しましょう。
結果は次のようになります。
上記画像のファイル名は bule_moji.jpg とします。
簡単ですが、これを作成します。
文字を重ねるコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
// 文字列を挿入する先の画像 $file = "blue.jpg"; // 出力後のファイル名 $newfile = "bule_moji.jpg"; // コピー先画像作成 $image = imagecreatefromjpeg($file); // 挿入する文字列 $text = "こんにちは!\n世界!"; // 挿入する文字列のフォント(今回はWindowsに入ってたメイリオを使う) $fontfile = "C:\Windows\Fonts\meiryo.ttc"; // 挿入する文字列の色(白) $color = imagecolorallocate($image, 255, 255, 255); // 挿入する文字列のサイズ(ピクセル) $size = 72; // 挿入する文字列の角度 $angle = 0; // 挿入位置 $x = 10; // 左からの座標(ピクセル) $y = 10 + $size; // 上からの座標(ピクセル) // 文字列挿入 imagettftext( $image, // 挿入先の画像 $size, // フォントサイズ $angle, // 文字の角度 $x, // 挿入位置 x 座標 $y, // 挿入位置 y 座標 $color, // 文字の色 $fontfile, // フォントファイル $text); // 挿入文字列 // ファイル名を指定して画像出力 imagejpeg($image, $newfile); |
コード解説
ベースとなる画像 blue.jpg をimagecreatefromjpeg()で読み込みます。
次に挿入するテキストの情報を定義します。
フォント($fontfile)は、今回はWindowsにインストールしたXAMPP環境だったので元々Windowsに入っていたメイリオというフォントを指定しました。
拡張子は.ttcになります。
サーバー上にフォントが無い場合はアップロードしてパスを指定しましょう。
挿入する文字列の角度は、度で指定します。
0度を指定すると、真横に描画されます。
15と指定すると、開始位置から右上に15度傾きます。
挿入位置のy軸にフォントサイズ($size)を追加している理由ですが、挿入するテキストの1文字目の左下が描画の基点になるようです。
なので、yを0にすると、ベース画像の上辺をベースラインとしてテキストが描画されるため画像内に描画されません。
なんだか微妙な仕様ですが実験してみたらそうでした。
そのため空けたい余白+文字サイズをすることで正常に空けたい余白を機能させれます。
最初サンプルコードを作って動かしても文字が描画されなくて焦りました(笑)まったく迷惑な仕様ですね!!
上で定義した情報をimagettftext()の引数にセットし、テキストを画像内に重ねるように挿入することができます。
そしてimagejpeg()を使い新規画像として出力します。
まとめ
PHPで画像内に文字列を挿入する方法でした。
ベース画像はimagecreatefromjpeg()で読み込む。
挿入テキストは、挿入文字列、フォント、サイズ、カラー、角度を指定します。
imagettftext()で挿入場所を指定し上で定義した情報でテキストを挿入します。
コメントを残す