PHP GDでテキストを描画し、画像の幅・高さがそれを含む最小になるように
したいのです。
まずimageftbboxでバウンディングボックスを取得し、そのサイズにすればいいかと思い
以下のコードを書いてみましたが、うまくいきません。
<?php
$fontSize = 20;
$angle = 0;
$fontFile = './msgothic.ttc';// MSゴシック
for ($code = ord('A'); $code <= ord('Z'); $code++) {
$text = chr($code);
$bbox = imageftbbox($fontSize, $angle, $fontFile, $text);
$w = $bbox[2] - $bbox[0];
$h = $bbox[3] - $bbox[7];
var_dump($bbox);
echo "w = $w h = $h\n";
$im = imagecreatetruecolor($w, $h);
$backcolor = imagecolorallocate($im, 0x00, 0x00, 0x00);
$forecolor = imagecolorallocate($im, 0xff, 0xff, 0xff);
imagefill($im, 0, 0, $backcolor);
$x = 0;
$y = -$bbox[7];
echo "x = $x y = $y\n";
imagefttext($im, $fontSize, $angle, $x, $y, $forecolor, $fontFile, $text);
imagegif($im, $text .'.gif');
}
この場合、Iの右半分が切れてしまいます。
$xを調整すればいいのかと思い、$x = $bbox[0]などとしてみましたが、
どうやっても必ずどれかの文字の一部が切れてしまいました。
これを正しく描画するにはどのようにすればいいでしょうか?
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
imageftbbox で取得されるピクセル位置の原点は、ベースポイント (その文字の左下の角に近い文字のベースライン点) と、マニュアルにありますが、これは等幅で描くときの基準点のようです。
特に I は細いので、文字部分の開始点($bbox[0])は、+3などになります。他の太めの文字は、-1なので、4pixelも異なることになります。(20point の場合)英文字は、はみ出たり細かったり差が激しいので、文字サイズちょっきりにするとかえって不揃いになります。
よって、x位置も、左端の $bbox[0] または、$bbox[6] から算出しないと。
$x = -$bbox[6];
$y = -$bbox[7];
せっかくvar_dump してても、$textも一緒に書き出さないと、どの文字がどんな位置に出力されてるか、数値だけみててもわかりにくいです。
この回答への補足
$x = -$bbox[6];
$y = -$bbox[7];
こうすると余計はみ出てしまいました。
なお、質問本文にもあるように、$bbox[6](==$bbox[0])も-$bbox[6]もすでに試しましたがだめでした。
No.1
- 回答日時:
リファレンスのサンプルコードを使ってもうまくいかないのですか?
この回答への補足
「例1 imageftbbox() の例」のことでしょうか?
これは300x150の画像の中央に文字列を配置する例で、
私が欲しいのはこの状態から文字列を左上に移動し、さらに画像サイズを
最小(「The PHP Documentation Group」なら188x15くらい)にした状態です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- 英語 Im so happy really with all my hearth for yours wo 3 2022/06/12 21:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスかラベル上の...
-
sublimit textっていうエディタ...
-
ExcelのVBAで文章にある複数の...
-
XMLファイルのattribute値がう...
-
WORd VBA 文章を単語に分解する
-
DTPicker テキストクリアの方法
-
Pythonのre.split()の正規表現...
-
Rubyにおける正規表現(一致し...
-
チェックボックスを操作できな...
-
VB.NETでのイベントの途中終了
-
エクセルVBAでテキストボッ...
-
C#のループでtextboxに値を入れ...
-
VBA public変数はどのようなこ...
-
アクセスできない保護レベルエ...
-
エクセル・VBAでテキストボック...
-
他のフォームから別のフォーム...
-
タイムアウトする仕組みを作りたい
-
VBAで入力数値について
-
C言語のサフィックスについて
-
三項でたとえば交換って
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sublimit textっていうエディタ...
-
ExcelのVBAで文章にある複数の...
-
テキストボックスかラベル上の...
-
【VBS】クリップボード操作につ...
-
RichTextBoxで指定行の色を自動...
-
vba 日本語以外を抽出について
-
文字列を配列に…。
-
Pythonのre.split()の正規表現...
-
VBスクリプトでファイルのコピ...
-
VB6.0 sp5]テキストボックスと...
-
文字列を日付型情報として計算...
-
XMLファイルのattribute値がう...
-
VBScript、ClipboardDataオブジ...
-
[VB6] SQLの作成について
-
Visual Basicについてお聞きし...
-
表の文字の均等割りについて
-
perlによるxmlファイルの取得
-
Googleシート「A1」でなくて「A...
-
HTMLのデータ読み取り
-
サンプルプログラムをコンパイ...
おすすめ情報