views:

143

answers:

0

Currently I've got the following working just fine without any problems (yet).

header ("Content-type: image/png");

$string = $_REQUEST['text'];
$font = 15;

$width = 300;
$height = 350;
$image = imagecreate($width, $height);

$back = ImageColorAllocate($image, 255, 255, 255);
$border = ImageColorAllocate($image, 0, 0, 0);

ImageFilledRectangle($image, 0, 0, $width, $height, $border);
ImageFilledRectangle($image, 1, 1, $width-2, $height-2, $back);

$text_color = imagecolorallocate($image, 255, 0, 0);

ImageStringWrap($image, $font, 3, 2, $string, $text_color, $width-2 );

imagepng($image);

function ImageStringWrap($image, $font, $x, $y, $text, $color, $maxwidth) {
    $fontwidth = ImageFontWidth($font);
    $fontheight = ImageFontHeight($font);

    if ($maxwidth != NULL) {
        $maxcharsperline = floor($maxwidth / $fontwidth);
        $text = wordwrap($text, $maxcharsperline, "\n", false);
    }

    while (list($numl, $line) = each($lines)) {
        ImageString($image, $font, $x, $y, $line, $color);
        $y += $fontheight;
    }
}

While the above works great, one thing I've been failing to work is be able to get line breaks like would come out akin to nl2br().

The text that this is pulling from in $_REQUEST['text'] is from the database, which was originally inserted from a textarea and passed to this script via URL. Naturally when people type in a textarea, there are line breaks that come from that. While printing it to the browser via text is easy, I can't seem to get the same result within an image.

I haven't spend a long time working with the GD library, but after searching around I really can't find anything about how to do this. Is it just not possible?