2011-09-15 11 views
4

newPseudoImageに注釈テキストを追加していますが、画像サイズに合わせてテキストの縮尺を変更したいと思います。PHP画像の注釈を最適にする方法を教えてください

どうすればいいですか?

$im = new Imagick(); 
$draw = new ImagickDraw(); 

$draw->setFillColor($color); 
$draw->setFont($font); 
$draw->setFontSize(($width, $height)/100) * 15); 
$draw->setGravity(Imagick::GRAVITY_CENTER); 

$im->newPseudoImage($width, $height, "canvas:{$bg}"); 
$im->annotateImage($draw, 0, 0, 0, $text); 

$draw->clear(); 
$draw->destroy(); 

$im->setImageFormat('gif'); 

header("Content-Type: image/gif"); 
echo $im; 
+0

本当に誰も答えはありませんか? – DrKHunter

答えて

8

imageftbbox機能を使って手助けをすることができたと思います。

これは、指定されたttfフォント、サイズ、および角度でテキスト文字列の境界ボックスを表示します。

テキストが画像に正しく当てはまらない限り、フォントサイズを増減するループを作成することができます。

<?php 

$bbox = imageftbbox(12, 0, 'Arial.ttf', 'This is a test'); 
$width_of_text = $bbox[2] - $bbox[0]; 

あなたは$width_of_textを見て、フォントがお好みに合わせて拡大縮小されていない限り、フォントサイズを調整することができます。フォントを大きくすると、幅と高さが増加することに注意してください。

あなたがそれを拡大しようとしているものによって、それが役立つかもしれません。

1

私は同じ問題に直面していますが、まだ私はマシンから離れているので、私はこれを試しませんでしたが、私はこれを行っています。

クラスのクエリフォントメトリクス関数を使用すると、計算されたテキストの幅を取得し、それをそのコンテナの指定された幅と比較できます。私はフォントサイズを調整して、それが十分に近いまで繰り返すでしょう。この方法ではかなり正確ですが、イメージに複数のテキスト項目がある場合は、パフォーマンス上の問題があることに気をつけてください。

一方、テキストのスタイルを心配していない場合は、キャプションを使用できます。

+1

これは理論的に質問に答えるかもしれませんが、答えの本質的な部分をここに含め、参照のためのリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。 –

-1

これはやや素朴な解決策です(私は適切なフォントサイズを見つけるためにバイナリ検索を使用していた可能性があります)。

私の例では、イメージのボックスにテキストを配置したいので、imageftbboxで適切なフォントサイズを計算します。

$size = $MAX_FONT_SIZE; 
while (true){ 
    $bbox = imageftbbox($size, 0, $font, $text); 
    $width_of_text = $bbox[2] - $bbox[0]; 
    if ($width_of_text > $MAX_TEXT_WIDTH) { 
      $size -= 1; 
    } 
    else { 
      break; 
    } 
} 
$height_of_text = ($bbox[3] - $bbox[1]); 
$draw->setFontSize($size); 
$image->annotateImage($draw, $TEXT_WIDTH_CENTER - $width_of_text/2, $TEXT_HEIGHT_CENTER - $height_of_text/2, 0, $text); 
関連する問題