画像に文字を書き込む時に不便な点が…

PHPには標準でimagettftextという関数が存在します。

これは、画像に指定した文字列を指定した位置に書き込む関数ですが、少し不便だと思う点があります。

例えば、

  • CSSでいう「text-align」のような複数行の文字列を指定した位置に揃える方法
  • 簡単に文字列を画像の中央や右端に配置する方法
  • 右から位置を指定する方法

などがあります。そこで、今回はそれらを可能にする関数を作りました。

 

関数の解説

めっちゃ長いです…

 

引数

まずは引数から解説します。

今回、全部で引数は10個あります。

前は元となっている「imagettftext」とほぼ同じ内容です。

第二引数としてファイルへのパスを追加しました。

これは、後に登場する「getimagesize」でファイルのフルパスが必要になるためです。

また、「$x」、「$y」は文字列を指定することも可能になりました。

  • 「$x」の場合
    • 指定可能な値:left(左端),center(中央),right(右端)
  • 「$y」の場合
    • 指定可能な値:top(上),center(中央),bottom(下)

後2個は任意の引数になります。

  • 「$align」は複数行の文字列において揃える方向を指定します。
    • 指定可能な値:left , center , right
    • デフォルト値:left
  • 「$offset」は指定された横方向の基準となる方向を指定します。
    • 指定可能な値:left , right
    • デフォルト値:left

 

続いて、今回使用する画像と文字それぞれのサイズを取得します。

26,27行目で配列の添え字として利用している値は冒頭で宣言していた部分です。

これは、「imagettfbbox」で文字列の4隅のXY座標が配列として返され、配列に上記の添え字を与えると指定の箇所の座標を取得できます。

 

続いて、文字を配置するXY座標を決めます。

X座標は数値が入力された場合はオフセットが右の場合を除きそのまま格納しますが、文字列(left , center , right)が入力された場合はそれぞれ、左寄せ・中央寄せ・右寄せになるようにXの座標を計算します。

Y座標もほぼ同じなので省略します。

 

最後は画像に文字列を書き込みます。

「$align」の値を元に処理を分岐します。

‘left’の場合は通常通りのため、そのまま「imagettftext」を使用して書き込みます。

‘right’の場合は行ごとに文字列を分解して、右側に揃うようにx座標を各行調整して1行ずつ書き込みます。

‘center’も’right’と同じく中央揃えになるように1行ずつ調整して出力します。

以上がOGPを自動生成するにあたって使いやすくした関数です。

 

今回のブログ曲

今回投稿中に聴いていた曲はこちら


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です