Image replacement for entry titles

NOTE: Hello recent visitors! Please note that the current title images that you see here are the result of completely revamped version of the plugin that supports soft shadows among other things. Please visit this page for more information.

As you have probably noticed, I decided to waste even more of the precious Internet bandwidth on vanity by moving to auto-generated images for entry title text. I’ve always liked the look of those people who have done it — Matt is one — but never jumped on the bandwagon.

Now I find a rather easy-to-use WordPress plugin by Joel Bennett and figured “why not?” It really was just drop-in simple. However, my site is relatively narrow in design, and some of my longer titles didn’t fit. There was no word-wrap support for longer titles.

So I added it! I tell you, there’s a lot of power there with PHP. I found some examples that people had made for word-wrapping based on the bounding box of a rendered text, but none of them were “nice enough” for me. So I did it my way, with support for indenting subsequent lines and specifying the vertical space between lines.

How was this done?

Let’s see if my code handling is up for this. Here’s how I split the single text title into an array of lines that fit within the stated width:

[code lang="php"]function break_text_into_lines( $text ) {
global $font_file,$font_size,$left_padding; global $max_width, $space_between_lines, $line_indent;

// the returned array of strings to be on separate lines.
$text_array = array();

// Figure out how big a space is. Yes, I'm being anal.
$bbox = imagettfbbox($font_size,0, $font_file, ' ');
$space_width = max($bbox[2],$bbox[4]) - min($bbox[0], 
    $bbox[6]);

// Split the array into word components.
$words = explode( ' ', $text );
$current_line = '';
$current_width = $left_padding;
foreach( $words as $word )
{
    $bbox = imagettfbbox($font_size, 0, $font_file, $word );
    $word_width = max($bbox[2],$bbox[4]) - min($bbox[0], 
        $bbox[6]);

    // See if the current word will fit on the line.
    if( $word_width + $current_width + $space_width > 
       $max_width )
    {
        // It won't. Check the border case where we have a 
        // friggin' huge first word. If so, it'll have to 
        // be rendered on the line regardless.
        if( $current_line != '' )
        {
            $text_array[] = $current_line;
            $current_width = $word_width + $left_padding + 
                $line_indent;
            $current_line = $word;
        }
        else
        {
            $text_array[] = $word;
            $current_width = $left_padding + $line_indent;
            $current_line = '';
        }

        continue;
    }

    // Word fits, so append it.
    if( $current_line != '' )
    {
        $current_line .= ' ';
    }

    $current_line .= $word;
    $current_width += $word_width + $space_width;
}

if( $current_line != '' )
{
    $text_array[] = $current_line;
}

return $text_array;

}[/code]

I’m really happy with the results. The full plugin is available here. I told the author of the original plugin that he’s welcome to roll the changes into his plugin, so it may show up there in the future. For those who want my version, feel free to grab it.

33 Comments

  • DiegoPino says:

    sorry, but my english its no so good.

    Hola.

    Soy nuevo en Wordpress y estoy aprendiendo. he instalado el plugin de la forma correcta, he leido todo los manueles en ingles y la orientacion que aca se presta, pero sigue sin funcionar en mi web. Nota: Esta confirmado que my server esta bien configurado, y soporta libreria GD para fuentes true type. me sale algo asi: -image-Entrada test ver ejemplo test on Line:

    http://www.we11.net/diegopino/wordpress/

    Test de que esta funcionando la libreria GD para fuentes tryçue Type: http://www.we11.net/diegopino/wordpress/wp-content/image-headlines/truetype.php

    Espero que me puedan ayudar, porque ya me estoy cansando de tanto leer y no funcionar. el Chmod esta correcto. por su atencion prestada, muchas gracias de antemano.

    Atte DiegoPino

    :-)

  • jason says:

    this plugin is absolutely FABULOUS. i have one recommendation…. be more specific when referencing a font…. ie e:\www\wp-content\image-headlines\microgbe.ttf

  • A couple changes

    If you are a regular reader of the carnage, you have no doubt noticed some changes to the site. The new titles for entries are images that the server creates, which is good, because I wouldn’t want to make a new image for every entry title. The plugin…

Leave a Reply