GDライブラリで文字を右寄せ出力する

初めまして。PHP(とガンダム)を勉強中の、エンジニアの庄子です。

PHPのGDライブラリを使っていて、文字を右寄せ出力する方法で少し悩みましたので、ブログネタにしてご紹介します。

 

テスト環境

・MAMP(php 5.5.10)
・chrome
・IPAフォントファイル

 

やりたいこと

下図のように、画像に複数行の任意の文字列を出力したい場合に、右寄せで揃えて出力したい。

 

つまり、こうなってしまうのを・・・

やられる気がしない

初代ガンダムの第4話まで観ましたが、ガンダムがやられる気がまったくしません。

 

こうしたい!

がんばれザク!

がんばれザク!

 

対応方法

まず左寄せソースは下記のような感じです。

 

残念ながら文字出力関数のimagettftextには、右寄せのオプションはありません。

そのため、

1. あらかじめ出力する文字列の長さを計算しておく

2. 右寄せで揃えたい位置から、計算した長さを引いたX座標に文字を出力

とする必要があります。

 

右寄せに対応したソースは下記になります。

 

1.の文字列の長さは、imagettfbbox関数で求めることができます。

戻り値がテキスト出力時の左下、右下、右上、左上のそれぞれのX座標とY座標が配列で取得できるので、その値から幅を計算しています。

プロポーショナルフォントの場合、上記対応を行っても若干ずれているように見えてしまうため、出力する文字によって若干調整する必要があるかもしれません。

 

以上になります。

C/C++で育ってきた私としては、PHPの構文はスッと頭に入るので好きです。

今後もPHP(とガンダム)のお勉強がんばります!