Ver Mensaje Individual
  #19 (permalink)  
Antiguo 14/08/2008, 09:06
Avatar de el_javi
el_javi
 
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 20 años
Puntos: 10
Respuesta: Generar imagen con texto + WORDWARP

Hola GatorV

Pues te cuento.. llevo todo el día trabajando en esta función, en hacerla funcionar y en adaptarla a que haga lo correcto.

Te cuento los problemas y déficit de la función.

PROBLEMAS

Código PHP:
function imagettftextwrap($im$size$angle$x_pos$y_pos$color$font$instr)
{
    
$box = @imagettfbbox($size0$font$instr);
    
$width abs($box[4] - $box[0]);
    
$height abs($box[3] - $box[5]);
    
$overlap = (($x_pos $width) - imagesx($im));
    if(
$overlap 0//if the text doesn't fit on the image
    
{
        
$chars str_split($instr);
        
$str "";
        
$pstr "";
        for(
$m=0$m sizeof($chars); $m++)
        {
            
$bo imagettfbbox($fsize10$font1$str);
            
$wid abs($bo[4] - $bo[0]);
            if((
$x_pos1 $wid) < imagesx($im)) //add one char from the string as long as it's not overflowing
            
{
                
$pstr .= $chars[$m];
                
$bo2 imagettfbbox($fsize10$font1$pstr);
                
$wid2 abs($bo2[4] - $bo2[0]);
                if((
$x_pos1 $wid2) < imagesx($im))
                {
                    
$str .= $chars[$m];
                }   
                else
                {
                    break;
                }
            }
            else
            {
                break;
            }
        }
        
$restof "";
        for(
$l=$m$l sizeof($chars); $l++)
        {
            
$restof .= $chars[$l]; //add the rest of the string to a new line
        
}
        
imagettftext($im$size$angle$x_pos$y_pos$color$font$str); // print out the smaller line
        
imagettftext($im$size$angle0$y_pos $height$color$font$restof); //and the rest of it
    
}
    else
    {
        
imagettftext($im$size$angle$x_pos$y_pos$color$font$instr); //otherwise just do normally
    
}


imagesx: Es función de PHP 5 (me daba problemas dado que estoy trabajando bajo un hosting de PHP4)
(ya lo he solucionado)

$fsize1: No existe esta variable. Realmente es $fsize

$font1: No existe esta variable. Realmente es $font

$x_pos1: No existe esta variable. Realmente es $x_pos

Todos estos elementos YA los he solucionado

Además esta función, lo que hace es controlar que si se pasa de 1 línea la frase, lo rompe en 2 líneas (pero no rompe por palabras.. lo rompe por caracteres)

Y además, a partir de la segunda línea, no controla si hay más posibles saltos de línea, sino que el resto de la frase lo pone de seguido en la segunda línea.

Y por último, a pesar de hacer un salto de línea en la imagen, no hacía una ampliación de la altura de la misma, por lo que en 20px de altura de fuente, generaba las 2 líneas.

Así que estoy trabajando en:
- Hacer que las palabras, si no entran en una línea, se rompan a una siguiente línea (pero la palabra completa)
- Hacer que esto tenga una recursividad, y que se genere una imagen multilínea, asumiendo como alto el alto de la fuente * el número de líneas generadas + el margen superior.


Si tienes algún aporte o ayuda, te estaré muy agradecido.

Un saludo.

Javier