PHP GD. Saltos de línea extraños

Stricken

Llevaré como 5 horas dándole vueltas a esto.

 /* PARTIMOS EL CONTENIDO */
        $palabras = explode(' ', $this->contenido);
        $lineas = array($palabras[0]);
        $lineaActual = 0;
        for ($i = 1; $i < count($palabras); $i++) {
            $tamanoLinea = imagettfbbox($this->tamano_contenido, 0, $this->fuente_contenido, $lineas[$lineaActual] . ' ' . $palabras[$i]);
            if ($tamanoLinea[4] < $this->ancho_lienzo - 50) {
                $lineas[$lineaActual] .= ' ' . $palabras[$i];
            } else {
                $lineaActual++;
                $lineas[$lineaActual] = $palabras[$i];
            }
        }

    $this->lineas_totales = 1;

    foreach ($lineas as $linea) {
        $line_box = imagettfbbox($this->tamano_contenido, 0, $this->fuente_contenido, $linea);
        $line_width = $line_box[0] + $line_box[2];
        $line_height = $line_box[1] - $line_box[7];
        $line_margin = ($this->ancho_lienzo - $line_width) / 2;
        $line_y = (($line_height + 5) * $this->lineas_totales);
        imagettftext($this->cartel, $this->tamano_contenido, 0, $line_margin, $line_y + $this->alto_final + 75, $this->pintar('negro'), $this->fuente_contenido, $linea);
        $this->lineas_totales++;
    }

Se supone que eso parte un texto en cachos en función de si cabe o no en un determinado espacio ($this->ancho_final).

La cosa es que según el texto, lo hace bien, por ejemplo:

$imagen = new Generador('2.png', 450, 4500, 'Título', 'Donec nec consequat massa. Morbi sed enim nisi. Aenean nisi felis, tempus eget fermentum eu, pretium at ipsum. Cras ut purus ac ipsum pulvinar interdum a id purus. Cras erat nisl, molestie at mollis pellentesque, ultricies ac leo. Aliquam malesuada mattis diam, a dignissim diam lacinia vel. Maecenas condimentum, elit vel rutrum accumsan, justo urna commodo turpis, non fringilla nisl nunc a enim. Nullam libero lectus, sagittis at vulputate ut, pharetra id arcu. Aliquam aliquet, arcu sit amet gravida hendrerit, orci mi posuere dolor, eget tincidunt mauris lacus ut purus. Donec interdum volutpat nunc quis suscipit. Nullam convallis, dolor quis volutpat interdum, felis lorem pulvinar turpis, in dapibus orci diam ac ligula. Sed eu mi orci, nec molestie dui. Proin bibendum augue ac orci dapibus sed dignissim neque molestie. Vivamus ut sodales augue. Nulla mattis leo nec magna gravida volutpat.');

(http://i49.tinypic.com/2gw5d1k.png)

Lo hace bien y lo centra pero

$imagen = new Generador('2.png', 450, 4500, 'Título', 'Donec sit amet venenatis eros. Etiam vitae condimentum sem. Suspendisse ligula neque, laoreet in mattis ut, dignissim vel purus. Sed luctus nunc scelerisque dui varius ac semper lorem porttitor. Aliquam iaculis semper quam, a feugiat ligula placerat eu. Curabitur aliquam nisl ac arcu posuere quis tincidunt dolor tincidunt. Nulla vel tellus sit amet ante sollicitudin laoreet cursus et odio. Maecenas tincidunt sagittis metus nec fringilla. Donec tincidunt turpis id lacus rhoncus aliquet. Integer in lorem arcu, id mattis dui. Mauris elementum lobortis gravida. Sed malesuada enim eu tortor convallis ut blandit elit scelerisque. Donec eros libero, sodales vitae ornare nec, eleifend non urna. Duis hendrerit accumsan purus, ac vestibulum dolor faucibus vel. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.');

http://i47.tinypic.com/30xcuur.png

Lo hace mal.

Por mas vueltas que le doy no consigo hacer que salga bien, ahora mismo estoy mirándome la extensión Imagick como alternativa, pero ya más por la curiosidad de qué coño es lo que falla :/

HeXaN

¿Y si metes el texto en un <p> y le pones "justify" con un ancho y alto que te guste? Si es que lo quieres imprimir en una web, claro.

Stricken

Uh, la cosa es que el texto está dentro de la imagen, necesito que sea así porque pretendo que la gente pueda descargarla luego.

EDIT: Solucionado, pillé una función de php.net y rula perfectamente.

http://www.php.net/manual/es/function.imagettfbbox.php#60678

Usuarios habituales

  • Stricken
  • HeXaN