imagepsbbox

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

imagepsbbox -- 给出一个使用 PostScript Type1 字体的文本方框

说明

array imagepsbbox ( string text, int font, int size [, int space, int tightness, float angle] )

size 以像素表示。

space 可以用来改变字体中默认间距的值。此值将被加到通常的值上,可以为负值。

tightness 可以控制字符之间的间距。此值将被加到通常字符宽度上,可以为负值。

angle 以角度表示。

spacetightness 以字符间距单元表示,1 个单元为 1 em-square 的一千分之一。

spacetightnessangle 参数为可选项。

围绕文本范围的虚拟方框是用从字符度量学中的可用信息来计算的,不幸的是往往和实际上光栅生成的文本的结果有少许不同。如果角度为 0 度,(根据经验)文本在每个方向上都需要多 1 个像素。

注: 本函数仅在 PHP 编译时指定了 --enable-t1lib 时可用。

本函数返回包含有下列单元的数组:

0左下角的 X 坐标
1左下角的 Y 坐标
2右上角的 X 坐标
3右上角的 Y 坐标

参见 imagepstext()


add a note add a note User Contributed Notes
honza dot bartos at gmail dot com
24-Oct-2006 05:25
When using imagepsbbox, keep in mind, that meaning of y-coordinates is slightly different here. Y-coordinates returned by this function are related to the baseline of the text starting at point [0,0]. Positive values represent points ABOVE the baseline, negative values represent points BELOW the baseline. That is why the lower left y-coordinate is always smaller here than the upper right y-coordinate (these two coordinates are actualy values of metrics.descent and metrics.ascent - see T1Lib docs).

So when you want to place some text using coordinates of the top left corner (for example [100,100]), use this:

<?php

$x
= 100;
$y = 100;
$text = "Dodge this";
$fontsize=18;
$font=imagepsloadfont("somefont.pfb");
list(
$lx,$ly,$rx,$ry) = imagepsbbox($text,$font,$fontsize);
imagepstext ($someimage, $text, $font, $fontsize, $somecolor, $somecolor, $x, $y + $ry);

?>

Hope it helps someone, I got stuck with this for a while.
daniel at dantec dot NO_SPAM dot nl
18-Apr-2002 12:23
When using imagepsbbox, you are probably trying to do something like creating a button with text, so that the button is large enough for the text...
Below is a very simple example of making a black button just big enough to display white text on it.

<?php

//if text is no variable set sample text
if (!$text)
  
$text = "This is a sample text";
  
// set the font size
$fontsize=14;

// load the font to use
$font=ImagePsLoadFont("/fonts/ariam___.pfb");

//get the left lower corner and the right upper
list($lx,$ly,$rx,$ry) = imagepsbbox($text,$font,$fontsize,0,0,0);

// calculate the size of the text
$textwidth = $rx - $lx;
$textheight = $ry - $ly;

// make an image 40 pixels wider and 20 pixels higher than the text
$imh = $textheight + 20;
$imw = $textwidth + 40;
$im = imageCreate( $imw, $imh );

//define colors, first color is used as background color!
$black  = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);

//create the text (with the same parameters as imagepsbbox!)
ImagePSText ($im, "$text", $font, $fontsize, $white, $white, 20, 20,'','','',4);

//send the header
header("Content-type: image/jpeg");

// create the image
ImageJPEG ($im,"",100);

//destroy the image & font to free memory
Imagepsfreefont ( $font );
ImageDestroy ( $im );

?>