PHPで画像を扱うにはGDが楽なのですが、文字を書こうとすると思ったポイントで描画されません。
おそらくDPIを設定しないとだめなのでしょうが、PHPのリファレンスを探しても見つかりませんでした。
仕方がないのでいろいろ値をとりながら調べてみると、96dpiということが判明。
webではなくアプリケーション向けに72dpiで画像を生成するには以下のような手順となった。
ちなみに画像からはみ出にくいように調整もしてある。
$fontSize = 72; $dpi = 96; $margin = $fontSize / 8; $baseline = $fontSize + $margin; $size = $fontSize + $margin * 2; $image = imagecreatetruecolor( $size, $size ); imageantialias( $image, true ); imagealphablending( $image, false ); imageSaveAlpha( $image, true ); $fillcolor = imagecolorallocatealpha( $image, 0, 0, 0, 127 ); imagefill( $image, 0, 0, $fillcolor ); $black = imagecolorallocate( $image, 0, 0, 0 ); $text = mb_convert_encoding( "あ", 'utf8' ); $font = 'xxxx.otf'; // 適当に置き換えて imagettftext( $image, $fontSize/$dpi*$fontSize, 0, 0, $baseline, $black, $font, $text ); imagepng( $image, 'output.png', 9 ); imagedestroy( $image );
印刷も考えるとEPSで描いてから画像にするのが一番確実だけど、imagemagic(正確にはghostscript)を経由するのも面倒だしこうなった。