[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