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($size, 0, $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($fsize1, 0, $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($fsize1, 0, $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, $angle, 0, $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