[Php-avanzado] Consulta Ejercicio 1 de Guia Imagenes
Juan Manuel P.
tucu_21 en hotmail.com
Lun Dic 10 23:33:31 ART 2012
Leo, estoy queriendo resolver el ejercicio 1 de la guia de imagenes. El
problema se me presenta cuando quiero centrar el texto. Abajo pego el
codigo.
Segun lei en php.net la libreria GD en la funcion
imagettftext el parametro para asignar el tamaño del texto es en puntos
no en pixeles, en cambio la imagen cuando se crea con la funcion
imagecreate se crea en pixeles.
Averiguando logre encontrar que 1pt son 4/3 de px o 1.25px
Las
pruebas de escritorio del codigo que pego dan resultados correctos,
pero cuando lo pruebo el texto queda realmente muy chico en comparacion a
como deberia de quedar y por consecuencia lo que seria centrar, ya que
no encontre en la documentacion ninguna funcion que centre el texto sino
es indicando las coordenadas X e Y en la funcion arriba mencionada.
El
codigo funciona para las cadenas que con tamaño de fuente 30px no
superan el maximo de la imagen, cuando es superado este maximo y la
fuente empieza a hacerse mas chica es donde los margenes se ven
comprometidos.
Codigo HTML del formulario donde se ingresa la cadena de caracteres.
<form action="imagen12.php" method="POST" enctype="text/plane">
<input type="text" name="texto" id="texto">
<input type="submit" value="enviar">
</form>
Codigo PHP del archivo que lo recibe y genera la imagen.
<?php
if (isset ($_POST['texto']));
{
//Creo la imagen
$MaxWidth=400;
$img1 = imagecreate($MaxWidth,100);
// Color del Fondo
$azul_cielo = imagecolorallocate( $img1, 64, 226, 255 );
// Color del texto
$negro = imagecolorallocate( $img1, 255, 0, 0 );
// Archivo de fuente ttf
$fuente = "../mascotas/Font/Arial.ttf";
// Texto a escribir
$texto = $_POST['texto'];
// Font size
$longtxt=strlen($texto);
//Obtengo el tamaño de la fuente en entero.
$size=intval(($MaxWidth-20)/$longtxt);
//Si el tamaño supera a los 30 pixeles, lo llevo a 30 pixeles que es el maximo elegido.
if($size>30)
{
$size=30;
}
//Obtengo la longitud en pixeles de la cadena, multiplico el tamaño de la fuente por la longitud de la cadena
$lenghttxt=$longtxt*$size;
//Divido la longitud maxima de la imagen en la longitud en pixeles de la cadena y lo divido por dos para saber el margen
//de cada lado que va a tener la cadena. Lo convierto en entero.
$PosX=intval(($MaxWidth-$lenghttxt)/2);
//Convierto el tamaño de la fuente de pixeles a puntos que es como lo maneja la libreria GD segun especificacion de php.net
$size=intval($size*(3/4));
// Agrego el texto a la imagen
imagettftext($img1,$size,0,$PosX,60,$negro,$fuente,$texto);
//Muestro la imagen por pantalla
header('Content-type: image/png');
imagepng($img1);
imagedestroy($img1 );
}
?>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20121210/74da5ae5/attachment.html>
Más información sobre la lista de distribución Php-avanzado