The coordinates given by x, y represent actually a starting point of the text baseline. They represent the lower left corner of the first character only in case that any part of the character doesn't lie below baseline (it works for "Hello" but for "Howdy" it does not - because of letter y). There may be some small differences according to the font and size chosen.
imagepstext
(PHP 4, PHP 5)
imagepstext — Ausgabe eines Textes auf einem Bild unter Verwendung von Typ 1 PostScript-Fonts
Beschreibung:
$image
, string $text
, int $font
, int $size
, int $foreground
, int $background
, int $x
, int $y
[, int $
space
[, int $
tightness
[, float $
angle
[, int $
antialias_steps
]]]] )
Size wird in Pixel ausgedrückt.
Foreground ist die Text-Ausgabefarbe
(Vordergrund). Background ist die Farbe,
zu der ein Farbübergang versucht werden soll. Dabei wird kein
Pixel mit der Farbe Background
ausgegeben, so dass das Bild im Hintergrund keine festen Farben
benötigt.
Die Koordinaten x und
y definieren den Ursprung (bzw. den
Referenz-Punkt) des ersten Zeichens (ungefähr die linke untere
Ecke). Dies ist anders als bei der
ImageString()-Funktion, wo
x und y die obere
linke Ecke des ersten Zeichens angeben. Lesen Sie in der
Dokumentation zu PostScript und seines Maßsystems nach, falls
Sie die Funktionsweise nicht verstehen.
Space ermöglicht Ihnen, die Standardbreite
eines Leerzeichens zu verändern. Der angegebene Wert wird zum
Standardwert hinzuaddiert und kann auch negativ sein.
Tightness ermöglicht die Kontrolle über
die Breite des Zeichenzwischenräume. Der angegebene Wert wird
zur normalen Zeichenbreite hinzuaddiert und kann auch negativ
sein.
Angle wird in Grad angegeben und hat die
entsprechende Drehung des Ausgabetextes zur Folge.
Antialias_steps erlaubt die Kontrolle
über die Anzahl der Farben, mit der der Farbübergang vom Text
zum Hintergrundbild vorgenommen werden soll. Möglich sind
Werte von 4 bis 16. Der höhere Wert wird empfohlen bei
Textgrößen kleiner als 20, wo der Effekt bei der Textqualität
deutlich sichtbar ist. Bei größeren Werten als 20 werden 4
Farben empfohlen. Das ist weniger rechenintensiv.
Die Parameter space und
tightness werden in 1/1000-stel der
Breite des Buchstabens "m" (Einheit 'em') angegeben.
Die Parameter space,
tightness, angle
und antialias sind optional.
Diese Funktion gibt ein Array mit den folgenden Werten zurück:
| 0 | untere linke X-Koordinate |
| 1 | untere linke Y-Koordinate |
| 2 | obere rechte X-Koordinate |
| 3 | obere rechte Y-Koordinate |
Siehe auch imagepsbbox().
imagepstext
24-Oct-2006 01:38
10-Jul-2003 02:11
It is important so make shure that the "text" really is a string.
imagepstext ($im, $text, $font, $textsize, $black, $white, 10, 10);
won't work if $text is undefined, so PHP will quit with an error.
so always write it like this:
imagepstext ($im, "$text", $font, $textsize, $black, $white, 10, 10);
04-Jun-2003 03:00
I found a way to let imagepstext understand 32-bit colors (RGBA) by replacing in gd.c:PHP_FUNCTION(imagepstext)
int _fg, _bg, x, y, size, space = 0, aa_steps = 4, width = 0;
with
unsigned int _fg, _bg, x, y, size, space = 0, aa_steps = 4, width = 0;
07-Feb-2003 03:12
I made a function that makes it easy to align text to the right
of an image. Below you can find the code because for me it
works great. You can also use it to center text as well, if you
like to have that simply remove the -10 and split the result
of $imgwidth and $texwidth
function AlignRight($string, $font, $imgwidth, $fontsize) {
list($lx,$ly,$rx,$ry) = imagepsbbox($string,$font,$fontsize,0,0,0);
$textwidth = $rx - $lx;
$imw = ($imgwidth-10-$textwidth);
return $imw;
}
06-Nov-2002 11:17
If you use fonts with special chars, remeber to read in the encoded file *.enc with imagepsencodefont ... etc. for Danish, Swedish, German.....
18-Feb-2002 03:16
a note on kernnig:
t1lib tries to load a corresponding afm file in the directory of the font file.
it does this by replacing the extension (.PFB .pfb) with ".afm". note that this has to be a lowercase afm! usually windows-ps-fonts have file names in all-uppercase, so try renaming the *.AFM file to *.afm.
i also noticed that sometimes this gives an error -2. it seems like t1lib chokes on windows-linebreaks in the afm file.
try 'recode dos..lat1 fontfile.afm' and check again.
if it all works, combinations like "Ta" or "Te" should show the second letter slightly moved to the capital T (on normal fonts like Times anyway).
24-May-2001 06:09
If you have a programming error in your code, using ImagePsText, sometimes t1lib crashes with an unrecoverable error. Because of this, httpd needs to be restarted.
This problem only occurs if there is a programming error, but can drive you crazy when debugging, if you don't know about it. By killing the parent process(httpd) you "reset" t1lib. When debugging, if you get an error then make a code change, restart httpd before testing it again. This will save hours of frustration. Make it a habit to just restart httpd after every error, and you will be much happier.
Also, to see debugging messages, (if you are rendering x's) comment the jpeg header, and the ImageJpeg statement. You will get beautiful error messages. When you get a blank page, your ImagePsText code is working correctly. Uncomment the Header() and ImageJpeg() and see what you have. You might be passing parameters that render a white image with no text, but the code is working!
Numeric t1lib error messages can be decoded using the t1lib_doc.pdf file that comes with t1lib. PHP simply relays these errors from t1lib to the page. Please don't ask the PHP people about these errors... t1lib has beautiful documentation.... use it: )
thx,
Neil
24-May-2001 05:56
One other thing... variables. It is important to convert variables to the proper type before they hit this function. In this respect, ImageTtfText is easier to work with. IE, if you pass a font size from one page to the next, via GPC, it becomes a string type. Sooo... use IntVal() to convert it to an integer type that ImagePsText can digest. In addition you must convert HTML special characters or use chr() to represent special characters. ImagePsFont will not decode to represent a space, use Chr(32) or a space:
$fontsize=IntVal($fontsize);
$font=ImagePsLoadFont("fonts/IntR.pfb");
ImagePsText($im, $textstring, $font, $fontsize, $textcolor, $background, 0, $fontsize,'','','',16); //note antialias is set
ImagePsFreeFont($font);
thx,
Neil
22-May-2001 02:54
with a font included in t1lib:
<?PHP
Header ("Content-type: image/jpeg");
$im = ImageCreate (350, 45);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
$font=ImagePsLoadFont("bchbi.pfb");
ImagePsText($im, "Testing... It worked!",
$font, 32, $white, $black, 32, 32);
ImagePsFreeFont($font);
ImageJpeg($im, "", 100);//for best quality... your mileage may vary
ImageDestroy ($im);
?>
Better than using freetype, but with freetype2, the difference is marginal. To flip backround and foreground colors, alternate the order of ImageColorAllocate statements.
If you get outlines (the antialiasing produces these) reverse the $black and $white color identifiers in the ImagePsText function.
Happy PostScripting!
thx,
Neil