imagepstext

(PHP 4, PHP 5)

imagepstextDibujar un texto sobre una imagen usando fuentes PostScript Type1

Descripción

imagepstext ( resource $image , string $text , resource $font_index , int $size , int $foreground , int $background , int $x , int $y [, int $space = 0 [, int $tightness = 0 [, float $angle = 0.0 [, int $antialias_steps = 4 ]]]] ) : array

Dibuja un texto sobre una imagen usando fuentes PostScript Type1.

Consulte la documentación de PostScript sobre fuentes y sus sistemas de medidas si tiene problemas en entender cómo funciona esto.

Advertencia

Esta función fue ELILMINADA en PHP 7.0.0.

Parámetros

image

Un recurso image, es devuelto por una de las funciones de creación de imágenes, como imagecreatetruecolor().

text

El texto que va a ser escrito.

font_index

Un recurso de fuente, devuelto por imagepsloadfont().

size

size, el tamaño expresado en píxeles.

foreground

El color en el cual el texto será pintado.

background

El color en el cual el texto intentará fundirse con antialias. Ningún píxel con el color background se pinta en realidad, por lo que la imagen de fondo no necesita ser de un color sólido.

x

Coordenada x de la esquina inferior izquierda del primer carácter.

y

Coordenada y de la esquina inferior izquierda del primer carácter.

space

Permite cambiar el valor predeterminado de un espacio en una fuente. Esta cantidad se añade al valor normal y puede ser negativa también. Expresado en unidades de espacio de carcteres, donde 1 unidad es la 1/1000 parte de una 'M' (em-square).

tightness

tightness permite controlar la cantidad de espacio en blanco entre caracteres. Esta cantidad se añade al ancho de un carácter normal y puede ser negativo. Expresado en unidades de espacio de carcteres, donde 1 unidad es la 1/1000th parte de una 'M' (em-square).

angle

angle, ángulo en grados.

antialias_steps

Permite controlar el número de colores usados para el texto con antialias. Los valores permitidos son 4 y 16. Se recomienda el valor más alto para tamaños de texto menores que 20, donde el efecto en la calidad del texto es bastante visible. Con tamaños mayores, use 4. Es menos intensivo computacionalmente.

Valores devueltos

Esta función devuleve una matriz que contiene los siguientes elementos:

0 coordenada x inferior izquierda
1 coordenada y inferior izquierda
2 coordenada x superior derecha
3 coordenada x superior derecha

Ejemplos

Ejemplo #1 Uso de imagepstext()

<?php
// Crear un gestor de imagen
$im imagecreatetruecolor(200200);

// Asignar colores
$negro imagecolorallocate($im000);
$blanco imagecolorallocate($im255255255);

// Cargar la fuente PostScript
$fuente imagepsloadfont('fuente.pfm');

// Escribir la fuente en la imagen
imagepstext($im'Sample text is simple'$fuente12$negro$blanco5050);

// Imprimir y liberar memoria
header('Content-type: image/png');

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

Historial de cambios

Versión Descripción
7.0.0 Se elimió el soporte para T1Lib de PHP, y así la eliminación de esta función.

Notas

Nota: Esta función sólo está disponible si PHP fue compilado usando --with-t1lib[=DIR].

Ver también

  • imagepsbbox() - Devolver la caja circundante de un rectángulo de texto usando fuentes PostScript Type1

add a note add a note

User Contributed Notes 12 notes

up
1
chrislewis60 at hotmail dot com
17 years ago
imagepstext() appears to be quite memory intensive and we had a problem where about 50% of the time the script would error. You need to make sure PHP has enough memory assigned to it - we had to increase PHP's allocation from 8MB to 16MB for a simple "hello world" example to work smoothly.

If the png header was commented out it would sometimes error with a message like:

Warning: imagepstext() [function.imagepstext]: T1Lib Error 11 or 14

and if the png header was there it would sometimes say:

The image [...] cannot be displayed, because it contains errors.
up
0
soletan at toxa dot de
14 years ago
As of PHP 5.2.13 with bundled GD (2.0.34) antialiasing_steps mustn't be "4 to 16", but "4 or 16". Values from 5 to 15 result in a warning.
up
0
whitemarker dot blogspot dot com
17 years ago
The documentation above is bad.  It says $font:
"Can be 1, 2, 3, 4, 5 for built-in fonts in latin2 encoding (where higher numbers corresponding to larger fonts) or any of your own font identifiers registered with imageloadfont()."

But it can't.  When I put in 1,2,3,4,5 I get
"Warning: imagepstext() expects parameter 3 to be resource, integer given"

I get the same thing when using imageloadfont() because imageloadfont() also returns an integer.  The documentation should instead say:
"resource returned from imagepsloadfont()."
up
0
honza dot bartos at gmail dot com
18 years ago
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.
up
0
johan (at) 1way2print.net
22 years ago
If you use fonts with special chars, remeber to read in the encoded file *.enc with imagepsencodefont ... etc. for Danish, Swedish, German.....
up
0
a at url dot de
22 years ago
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).
up
0
npdavis at hotmail dot com
23 years ago
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
up
-1
heckp at uni-trier.de
21 years ago
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);
up
-1
npdavis at hotmail dot com
23 years ago
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:

<?php
$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
up
-2
m.confalonieri(at)mclink.it
21 years ago
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;
up
-2
npdavis at hotmail dot com
23 years ago
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
up
-1
Jeroen dot Straahof at newego dot nl
21 years ago
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;
}
To Top