[Php-avanzado] Consulta Ejercicio 1 de Guia Imagenes

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Lun Dic 10 23:54:41 ART 2012


Hola Juan Manuel,

	No tengo por acá la guía de ejercicios, pero por tu código supongo que
es el de centrar un texto en una imagen.

	Si es así, estás mezclando cosas.
	Cuando hacés:

$longtxt=strlen($texto);

	estás obteniendo la cantidad de caracteres del texto, y de la cantidad
de caracteres cuando usás tipografías TrueType no podés calcular el
tamaño en píxeles que tendrá.

	No entiendo la idea detrás del código:

//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;
}

	pero cualquiera sea esta idea, no debería darte buenos resultados,
porque $MaxWidth está en píxeles y $longtxt es la cantidad de
caracteres.

	Por otra parte, no te debería hacer falta convertir de PX a PT, porque
la salida de ImageTTFText() es el rectángulo en píxeles que ocupa el
texto pasado a imagen de ese tamaño y tipo de fuente, por lo que de ahí
en adelante, el único problema es como centrar este rectángulo en el
rectángulo de la imagen final, en tu caso de 400 x 100 píxeles.

	Espero haberte orientado...



El lun, 10-12-2012 a las 23:33 -0300, Juan Manuel P. escribió:
> 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 ); 
> } 
> ?> 
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado