imagepsbbox

(PHP 4, PHP 5)

imagepsbbox Ermittle das umgebende Rechteck eines Textes unter Verwendung von PostScript Type1 Schriftarten

Warnung

Diese Funktion wurde seit PHP 7.0.0 ENTFERNT.

Beschreibung

array imagepsbbox ( string $text , resource $font , int $size )
array imagepsbbox ( string $text , resource $font , int $size , int $space , int $tightness , float $angle )

Ermittelt das umgebende Rechteeck eines Textes unter Verwendung von PostScript Type1 Schriftarten.

Das umgebende Rechteck wird berechnet unter Verwendung der für die Zeichen-Abmessungen verfügbaren Informationen und unterscheidet sich immer etwas von den aktuellen Raster-Werten des Textes. Ist der Winkel (angle) mit 0 angegeben, können Sie davon ausgehen, dass der Text in jede Richtung immer 1 Pixel mehr braucht als sonst.

Parameter-Liste

text

Der zu schreibende Text.

font_index

Eine Schriftartressource, die von imagepsloadfont() zurückgegeben wurde.

size

size ist die Größe in Pixel.

space

Ermöglicht, die Standardbreite eines Leerzeichens einer Schriftart zu verändern. anzugeben. Dieser Wert wird zum Normal-Wert hinzu gezählt und kann auch negativ sein. Wird in Zeichenraumeinheiten angegeben, wobei eine Einheit ein Tausendstel einen em-Quadrats ist.

tightness

tightness ermöglicht die Kontrolle über die Zeichenabstände. Der angegebene Wert wird zur normalen Zeichenbreite hinzu gezählt und kann auch negativ sein. Wird in Zeichenraumeinheiten angegeben, wobei eine Einheit ein Tausendstel einen em-Quadrats ist.

angle

angle (Winkel) wird in Grad angegeben.

Rückgabewerte

Gibt ein Array zurück, das folgende Elemente enthält:

0 linke x-Koordinate
1 obere y-Koordinate
2 rechte x-Koordinate
3 untere y-Koordinate

Changelog

Version Beschreibung
7.0.0T1Lib support was removed from PHP, thus this function was removed.

Beispiele

Beispiel #1 imagepsbbox() Verwendung

<?php
// Erzeuge ein Bild
$im imagecreatetruecolor(200200);

// Alloziere Farben
$black imagecolorallocate($im000);
$white imagecolorallocate($im255255255);

// Lade die PostScript Schriftart
$font imagepsloadfont('font.pfm');

// Ermittle das umgebende Rechteck für den Text
$bbox imagepsbbox('Ein einfacher Beispieltext'$font12);

// Definiere die x- und y-Koordinaten
$x = ($bbox[2] / 2) - 10;
$y = ($bbox[3] / 2) - 10;

// Schreibe Text in das Bild
imagepstext($im'Ein einfacher Beispieltext'$font12$black$white$x$y);

// Ausgabe und Speicherbereinigung
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

Anmerkungen

Hinweis: Diese Funktion steht nur zur Verfügung, wenn PHP mit der Option --with-t1lib[=DIR] übersetzt wurde.

Siehe auch

  • imagepstext() - Zeichnet Text auf einem Bild unter Verwendung von Typ 1 PostScript-Schriftarten

add a note add a note

User Contributed Notes 4 notes

up
0
eikie
10 years ago
I have a given image width and need to render a long string on that image. By using the following function I'm, able to get an array of strings which each will fit into the images width. It might need a lot of CPU time, but it's cool:

// Function to return an Array of Strings
// Arguments: String to be wrapped, maximum width in pixels of each line, font and fontsize
function imgwordwrap($s, $maxWidth, $font, $size) {
  // Make an empty ArrayList
  $a = array();
  $w = 0;    // Accumulate width of chars
  $i = 0;      // Count through chars
  $rememberSpace = 0; // Remember where the last space was
  // As long as we are not at the end of the String
  while ($i < strlen($s)) {
    // Current char
    $c = substr($s, $i, 1);
    $bb = imagepsbbox($c, $font, $size); // calculate width
    $w += abs($bb[3])-abs($bb[1]); // accumulate width
    if ($c == ' ') $rememberSpace = $i; // Are we a blank space?
    if ($w > $maxWidth) {  // Have we reached the end of a line?
      $sub = substr($s,0,$rememberSpace); // Make a substring
            // Chop off space at beginning
            if (substr($sub,0,1)==' ') $sub = substr($sub,1);
      // Add substring to the array
      $a[] = $sub;
      // Reset everything
      $s = substr($s,$rememberSpace);
      $i = 0;
      $w = 0;
    }
    else {
      $i++;  // Keep going!
    }
  }

  // Take care of the last remaining line
  trim($s);
  if (substr($s,0,1)==' ') $s = substr($s,1);
  $a[] = $s;

  return $a;
}
up
-1
honza dot bartos at gmail dot com
11 years ago
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.
up
-1
daniel at dantec dot NO_SPAM dot nl
16 years ago
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 );

?>
up
-1
eikie
10 years ago
in my code below, there is an error!

replace
$w += abs($bb[3])-abs($bb[1]); // accumulate width

with
$w += abs($bb[2])-abs($bb[0]); // accumulate width

also after
$bb = imagepsbbox($c, $font, $size); // calculate width

you can add this line because spaces make odd values...
if ($c == ' ' ) $bb = imagepsbbox('i', $font, $size);
To Top