へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

PHPのGDを齧ってみる

PHPの独学に用いた参考書の中に、GDで画像操作が出来るというのを知ったのですが、色々応用して使ってみたいと思うようになったので、ちらっと齧ってみることにします。

以下はテキストフォームから文字列を受け取り、画像として出力するプログラムです。

入力フォーム側: form.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <form action="gd.php" action="POST">
      <p>Input Message in English</p>
      <p><input type="text" name="msg"></p>
      <button>submit</button>
    </form>
  </body>
</html>
画像出力プログラム: gd.php
<?php
if(!isset($_POST['msg'])) {
  echo "Invalid Access!\n";
  exit(1);
}

$msg = $_POST['msg'];
$img = imagecreatetruecolor(480, 360);
$msgColor = imagecolorallocate($img, 255, 255, 255);
imagestring($img, 5, 10, 20, "$msg", $msgColor);
if(!imagepng($img, "msg.png")) {
  echo "Can't create image!\n";
  exit(1);
}
imagedestroy($img);
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <img src="msg.png">
  </body>
</html>

gd.php側の操作としては、まずimagecreatetruecolor関数でTrueColorイメージの新規作成をします。今回は幅480px, 高さ360pxの画像を作成しました。 次に、imagecolorallocate関数で、色のIDを作成します。 imagestring関数で、テキストフォームに入力した文字列を画像に反映させます。 文字色は$msgColorに格納した色のIDを反映させます。(この例では文字色は白) imgpng関数で、msg.pngというファイルに出力します。 新規作成の場合、出力先のディレクトリのパーミッションが適切に設定されていないと、画像が出力されません。 imagedestroy関数でメモリを解放します。 あとは出力するだけです。

とりあえず、任意の文字列を画像に取り込むことが出来るのですが、英語限定です。 日本語入力すると文字化けするんですよね... 日本語にも対応する方法を少し勉強しているので、もうちょっと使いこなせるようになったら、続編の記事として書こうかなとは思っています。 そんなこんなで、今回はここまで。

参考文献
  • 西沢夢路 著
    基礎からのPHP
    SoftBank Creative