|
 |
imagepstext (PHP 3 >= 3.0.9, PHP 4, PHP 5) imagepstext -- To draw a text string over an image using PostScript Type1 fonts Descriptionarray imagepstext ( resource image, string text, resource font, int size, int foreground, int background, int x, int y [, int space, int tightness, float angle, int antialias_steps] )
foreground is the color in which the text
will be painted. Background is the color
to which the text will try to fade in with antialiasing. No
pixels with the color background are
actually painted, so the background image does not need to be of
solid color.
The coordinates given by x,
y will define the origin (or reference
point) of the first character (roughly the lower-left corner of
the character). This is different from the
imagestring(), where x,
y define the upper-right corner of the
first character. Refer to PostScript documentation about fonts and
their measuring system if you have trouble understanding how this
works.
space allows you to change the default
value of a space in a font. This amount is added to the normal
value and can also be negative.
tightness allows you to control the amount
of white space between characters. This amount is added to the
normal character width and can also be negative.
angle is in degrees.
size is expressed in pixels.
antialias_steps allows you to control the
number of colours used for antialiasing text. Allowed values are
4 and 16. The higher value is recommended for text sizes lower
than 20, where the effect in text quality is quite visible. With
bigger sizes, use 4. It's less computationally intensive.
Parameters space and
tightness are expressed in character space
units, where 1 unit is 1/1000th of an em-square.
Parameters space,
tightness, angle
and antialias_steps are optional.
Замечание: Эта функция доступна только в
том случае, если PHP был скомпилирован с опцией
--enable-t1lib.
This function returns an array containing the following elements:
See also imagepsbbox().
imagepstext
heckp at uni-trier.de
10-Jul-2003 05: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);
m.confalonieri(at)mclink.it
04-Jun-2003 06: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;
Jeroen dot Straahof at newego dot nl
06-Feb-2003 06: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;
}
johan (at) 1way2print.net
06-Nov-2002 02:17
If you use fonts with special chars, remeber to read in the encoded file *.enc with imagepsencodefont ... etc. for Danish, Swedish, German.....
a at url dot de
18-Feb-2002 06: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).
npdavis at hotmail dot com
24-May-2001 09: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
npdavis at hotmail dot com
24-May-2001 08: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
npdavis at hotmail dot com
22-May-2001 05: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);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
| |