人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:PHP アルゴリズム イメージ サイト スマート
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● GoldenDawn
●60ポイント ベストアンサー

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

<?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) ;
?>

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

◎質問者からの返答

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

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

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

で無事解決しました!

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ