phpの、これを実現するアルゴリズムを模索しています。


・特定の画像に、テキストを合成する
・テキストの左右の余白を同じ幅にする

簡単にいえば、このサイトの画像のようなイメージです。
http://usokomaker.com/medal/

微調整すると左右の余白が同じになって、
テキストが中央に表示されるのですが、
なんかスマートな計算式がボケて出てこなくて・・・。

計算式があれば、お願いします・・・。

回答の条件
  • 1人3回まで
  • 登録:2008/06/27 17:08:24
  • 終了:2008/06/27 20:24:59

ベストアンサー

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812008/06/27 20:00:57

ポイント60pt

質問の意図通りか分かりませんが……

<?php
$width = 300 ; // 横幅
$font = './ipag.ttf' ;

//$str = '短い' ;
$str = 'うまい棒' ;
//$str = 'すこし長い文字列' ;
//$str = 'かなーり長いかもしれない文字列' ;

$fsize = 50 ;

$imgdata = imagecreatetruecolor($width, 300) ;
imagefill($imgdata, 0, 0, 0x00ffff) ;

$b = imagettfbbox($fsize, 0, $font, $str) ;
if ($b[2]-$b[0] > $width) {
  $fsize = $width * $fsize / $b[2] ;
  $b = imagettfbbox($fsize, 0, $font, $str) ;
}

imagettftext($imgdata, $fsize, 0, $width/2 - ($b[2]-$b[0])/2 - $b[0], 270, 0, './ipag.ttf', $str) ;

header('content-type: image/png') ;
imagepng($imgdata) ;
?>

ちょっと適当なので与える文字列やフォントによってははみ出るかも。

id:onigirin

どうもありがとうございます。

「丁度真ん中」という、計算式探してました。

$width/2 - ($b[2]-$b[0])/2 - $b[0]

で無事解決しました!

imagettfbbox と式でなんとかなり助かりました。

2008/06/27 20:24:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません