halka-tech

技術的なことを書きます

xamppでGDを使ってみる

モバイル向けサービスで良く画像に文字を入れるってのがあるなーと思ってました。
"I(はあと)すいそうがく"とか"foo(はあと)bar えたーなるらぶ"
見たいな感じの。
ってことでxmappで普段勉強してるもんで、xampp上でやってみたいと思います。

GDは入ってました。


jpegpngでの出力が可能みたいです。gifとか使う気はないです。

文字を載っけてみる

いざTrueTypeFontを使って、文字を書いてみます。
ipaの一般向けフォントを使います。

<?
//pngだとブラウザに宣言する。headerを送る。
Header ("Content-type: image/png");
//パレットを用意する(300px * 100px)
$img=imagecreate(300,100);
//背景色を指定(キャンパスを用意した変数, R,G,B Binで良いみたいです。0から255。Hexなら0xFFとか。)
$bgc=imagecolorallocate($img,255,255,255);
//文字色の指定
$textc=imagecolorallocate($img,0,0,0);
//フォントの指定 truetype
$font="ipagp.ttf";
//出力する文字列。途中で改行したいときは\nでいいみたい。
$str="南夏奈ちゃんかわいいよ!\n夏奈ちゃんはオレの嫁!!!";
//画像にテキストを書き込む
//imagettftext(キャンパスを用意した変数,文字サイズ,傾き(degree),x,y,文字色,フォントの指定,出力する文字)
imagettftext($img,20,0,10,30,$textc,$font,$str);
//pngで出力する
imagepng($img);
//別に保存したくないのでデストロイ
imagedestroy($img);
//おしまい
?>

headers already sent byと

UTF-8(BOMあり)で保存して実行すると

Warning: Cannot modify header information - headers already sent by...

なんでですか。グーグル先生にお尋ねすると

ファイル保存するときに文字コードを「Unicode (UTF-8 BOM有)」形式で保存してたのが原因でした。
phpでheaderが出力できなくてハマった件 - treasuring misc.

ということらしいので、BOMなし(よくわからないのでUTF-8N)で保存したらおめでたく

できたよー!!!
 
ほかに画像を読み込んで、その上に文字を書くことも可能なのでいろいろできそうですね。
参考にしたサイト
Geekなぺーじ : PHP GDプログラミング
PHP:GD - Manual