2012-07-27 11 views
13

GD PHPで生成された画像に追加するために、動的なテキスト行の幅を取得しようとしています。私は少しでも確信が持てません。私はimageloadfont()を使ってフォントを読み込む方法を知っていますが、.ttfファイルを使用できますか?私はサイズ12のarialフォントを使用してテキストの幅を知りたい。私がttfファイルを使用しようとすると、「フォントの読み込みエラー、無効なフォントヘッダー」エラーが表示されます。 .gdfファイルが必要な場合、12 gdfファイルのフォントサイズはどこで見つけることができますか?私のコードは次のとおりです。PHP GDでテキスト幅を計算する

$newfont = imageloadfont("../fonts/arial.ttf"); 
$font_width = imagefontwidth($newfont); 
$font_height = imagefontheight($newfont); 
+2

を取ります[imagettfbbox](http://www.php.net/manual/en/function.imagettfbbox.php)と[imagettftext](http://php.net/manual/en/function.imagettftext.php)を参照してください。 – Vatev

答えて

33

imageloadfont()は、ユーザー定義のビットマップをロードするために使用されます。 Arialやその他のTrueTypeフォント(.ttf)やOpenTypeフォント(.otf)(GD libの後者のサポートはバグ)を使用したい場合は、imagettftext()が必要です。 imagettftext()を使用してイメージにテキストを書き込む前に、まずそれが適合するかどうかを知る必要があります。これを知るには、imagettfbbox()に電話をかけて、フォントサイズ、テキストの角度(水平のテキストの場合は0)、.ttfまたは.otfフォントファイルのパス、テキストの文字列などを渡す必要があります。配列の8つの要素が4つの点を表し、テキストの境界ボックスを作成します(詳細はPHPマニュアルを参照してください)。それらの配列要素を参照し、その特定の文字列が占有する幅と高さを知るために計算を実行することができます。これらの値を使用して、特定の幅と高さの画像を作成し、テキスト全体を表示することができます。

<?php # Script 1 

/* 
* This page creates a simple image. 
* The image makes use of a TrueType font. 
*/ 

// Establish image factors: 
$text = 'Sample text'; 
$font_size = 12; // Font size is in pixels. 
$font_file = 'Arial.ttf'; // This is the path to your font file. 

// Retrieve bounding box: 
$type_space = imagettfbbox($font_size, 0, $font_file, $text); 

// Determine image width and height, 10 pixels are added for 5 pixels padding: 
$image_width = abs($type_space[4] - $type_space[0]) + 10; 
$image_height = abs($type_space[5] - $type_space[1]) + 10; 

// Create image: 
$image = imagecreatetruecolor($image_width, $image_height); 

// Allocate text and background colors (RGB format): 
$text_color = imagecolorallocate($image, 255, 255, 255); 
$bg_color = imagecolorallocate($image, 0, 0, 0); 

// Fill image: 
imagefill($image, 0, 0, $bg_color); 

// Fix starting x and y coordinates for the text: 
$x = 5; // Padding of 5 pixels. 
$y = $image_height - 5; // So that the text is vertically centered. 

// Add TrueType text to image: 
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_file, $text); 

// Generate and send image to browser: 
header('Content-type: image/png'); 
imagepng($image); 

// Destroy image in memory to free-up resources: 
imagedestroy($image); 

?> 

変更値に応じて、ニーズに合わせて:ここで

はあなたが始めるためにやろうとしているものを実現する簡単なスクリプトです。 PHPのマニュアルを必ずお読みください。 GD2、imagettfbboxのフォントサイズで

+2

偉大な答え.. +1 –

+0

申し訳ありませんが、[**この作品は動作しません**](http://i.stack.imgur.com/54yoj.png)。これはテキスト "666"(またはその他のAFAIK番号)とCourier Newフォントで生成されます。それは実際には他のフォントでも機能しません - 常にここで何かをカットします。私は、PHPの背後にいる人々が無能であることはあなたのせいではありませんが、それでもダウンボートであることを理解しています。 –

+0

[別の例](http://i.stack.imgur.com/tYJV7.png)ここで私は何が間違っているのかを強調しました。 –

1

次の変換でのPTではなく、ピクセルにする必要があります。

($のfontSizeInPixel * 3)/ 4

関連する問題