Utilizando fuentes TrueType
Si has leído los comentarios de la página anterior recordarás que para usar estas funciones es preciso que estén instaladas las librerías FreeType y que, además, conozcamos el path de directorio que contiene las fuentes TrueType.
Instalación de fuentes
Hemos creado un subdirectorio llamado fuentes y lo hemos incluido en directorio donde están alojadas estas páginas.
En ese subdirectorio hemos incluido dos fuentes TrueType manteniendo en una de ellas el nombre original (arial.ttf) y renombrado la otra como fuente2.ttf.
Como podrás comprobar en los ejemplos, no hay problema alguno por el hecho de renombrar las fuentes.
En ese subdirectorio hemos incluido dos fuentes TrueType manteniendo en una de ellas el nombre original (arial.ttf) y renombrado la otra como fuente2.ttf.
Como podrás comprobar en los ejemplos, no hay problema alguno por el hecho de renombrar las fuentes.
Escribiendo con fuentes TrueType
La función PHP que nos permite insertar este tipo de textos en imágenes dinámicas es la siguiente:
Imagettftext($nom, tam, ang, x, y, $col, $fuente, $txt)
donde:
$nom es, como siempre, el nombre de la imagen.
tam es un número entero que indica el el tamaño de la fuente.
ang es el giro expresado en grados sexagesimales que pretendemos que tenga la cadena de texto. Si ang=0 el texto aparecerá escrito en horizontal.
x e y son las coordenadas del punto de inicio de la inserción del texto. Ese punto coincide con la esquina inferior izquierda del rectángulo imaginario que contiene el texto.
$col es el color a utilizar en el texto.
$fuente es una cadena de texto que contiene el path y el nombre de la fuente. Observa los ejemplos.
$txt es el nombre de la variable que contiene el texto a insertar.
Imagettftext($nom, tam, ang, x, y, $col, $fuente, $txt)
donde:
$nom es, como siempre, el nombre de la imagen.
tam es un número entero que indica el el tamaño de la fuente.
ang es el giro expresado en grados sexagesimales que pretendemos que tenga la cadena de texto. Si ang=0 el texto aparecerá escrito en horizontal.
x e y son las coordenadas del punto de inicio de la inserción del texto. Ese punto coincide con la esquina inferior izquierda del rectángulo imaginario que contiene el texto.
$col es el color a utilizar en el texto.
$fuente es una cadena de texto que contiene el path y el nombre de la fuente. Observa los ejemplos.
$txt es el nombre de la variable que contiene el texto a insertar.
Colocando textos
PHP dispone de una función que permite determinar las dimensiones de una caja de texto (el rectángulo imaginario que rodea el texto).
$rec= ImageTTFBBox (tam, ang, $fuente, $txt)
donde: tam es el tamaño de la fuente a utilizar.
ang es el ángulo de rotación del texto que tendría valor cero en el caso de orientación horizontal.
$fuente es el path y nombre de la fuente a a utilizar.
$txt es el nombre de la variable que contiene el texto a incluir.
La variable $rec recoge un array escalar cuyos valores son las coordenadas de las cuatro esquinas de la caja de texto.
Los índices correspondientes a cada uno de los elementos de ese array son los siguientes:
$rec= ImageTTFBBox (tam, ang, $fuente, $txt)
donde: tam es el tamaño de la fuente a utilizar.
ang es el ángulo de rotación del texto que tendría valor cero en el caso de orientación horizontal.
$fuente es el path y nombre de la fuente a a utilizar.
$txt es el nombre de la variable que contiene el texto a incluir.
La variable $rec recoge un array escalar cuyos valores son las coordenadas de las cuatro esquinas de la caja de texto.
Los índices correspondientes a cada uno de los elementos de ese array son los siguientes:
- Inferior izquierdo
Sus coordenadas son:
$rec[0],$rec[1]
- Inferior derecho
Sus coordenadas son:
$rec[2],$rec[3]
- Superior derecho
Sus coordenadas son:
$rec[4],$rec[5]
- Superior izquierdo
Sus coordenadas son:
$rec[6],$rec[7]
Respecto a estas coordenadas, habremos de tener en cuenta lo siguiente:
- Las correspondientes al vértice inferior izquierdo son siempre (0,0).
- Los puntos situados por encima del (0,0) tienen ordenada negativa.
- Las abscisas de los puntos situados a la izquierda del (0,0) son negativas.
Dibujando segmentos Aunque presentaremos únicamente el código fuente de una de las imágenes, para hacer la comprobación de las funciones y las diferencias de visualización insertaremos dos ejemplos. Uno en formato PGN y otro en JPG. Recuerda que las únicas diferencias entre ambos radican en utilizar: Header("Content-type: image/png") o Header("Content-type: image/jpeg") y en las funciones Imagepng ó Imagejpeg. Texto TrueType horizontal <? Header("Content-type: image/png"); $im = imagecreate(400,300); $fondo=imagecolorallocate ($im, 255, 255, 210); $rojo=imagecolorallocate ($im, 255, 0, 0); $texto="PHP"; Imagettftext($im, 40, 0, 100, 270, $rojo, "./fuentes/fuente2.ttf", $texto); Imagepng($im); imagedestroy($im); ?>
Texto TrueType girado <? Header("Content-type: image/png"); $im = imagecreate(400,300); $fondo=imagecolorallocate ($im, 255, 255, 210); $rojo=imagecolorallocate ($im, 255, 0, 0); $texto="Me gusta PHP"; Imagettftext($im, 40, 30, 100, 270, $rojo, "./fuentes/fuente2.ttf", $texto); Imagepng($im); imagedestroy($im); ?>
Centrando textos Aquí tienes un ejemplo donde utilizando ImageTTFBox e ImageTTFText se puede centrar un texto -tanto si es horizontal como si está girado- con relación a un punto. En este ejemplo, el punto de referencia para el centrado es (200,150) que es el centro de la imagen. Las coordenadas de ImageTTFText, como puedes ver, están calculadas usando las coordenadas de ese punto de referencia y los valores del array generado por ImageTTFBox . Si la variable que contiene el array generado por ImageTTFBox se llama $pepa, las coordenadas del centro del rectángulo imaginario son $pepa[4]/2 y $pepa[5]/2 Partiendo de esos valores, si queremos centrar el texto sobre un punto de la imagen cuyas coordenadas son (X,Y) nos basta con escribir como parámetros de la función ImageTTFText los siguientes:
Este procedimiento es válido tanto para textos horizontales como para textos girados. Aquí lo tienes: <? Header("Content-type: image/png"); $im = imagecreate(400,300); $fondo=imagecolorallocate ($im, 255, 255, 210); $gris=imagecolorallocate ($im, 160, 160,160); $rojo=imagecolorallocate ($im, 255, 0, 0); $texto="El mundo del PHP"; $texto1="lleno de posibilidades"; $marco= ImageTTFBBox (40, 0, "./fuentes/arial.ttf", $texto); Imagettftext($im, 40, 0, 200-$marco[4]/2, 150-$marco[5]/2, $gris, "./fuentes/arial.ttf", $texto); $marco1= ImageTTFBBox (30, 30, "./fuentes/fuente2.ttf", $texto1); Imagettftext($im, 30, 30, 200-$marco1[4]/2, 150-$marco1[5]/2, $rojo, "./fuentes/fuente2.ttf", $texto1); Imagepng($im); imagedestroy($im); ?>
Un ejemplo resumen Aquí tienes un ejemplo bastante completo de generación de imágenes dinámicas.
En servidores UNIX y LINUX la forma en la que indicamos el path del directorio que contiene las fuentes varía sustancialmente respecto a la que hemos utilizado en estos ejemplos. En aquellos, además de invertir los separadores, se requiere indicar siempre rutas absolutas, con lo cual habría que hacer las modificaciones oportunas si se tratara de publicar en un hosting que utilice alguno de estos sistemas operativos. |
No hay comentarios:
Publicar un comentario