包装文字写在图像上

时间:2013-09-04 10:39:04

标签: php image gd php-gd

我想用php写一个包装文本到图像。这是一个demo。如果您将下面的文本复制,粘贴并发送到demo,您会注意到某些行被扭曲,并且有一些段落空格不能存在。我想要几个小时的代码。我无法理解问题出在哪里。有人帮帮我吗?

示例文字:

  

Lorem ipsum dolor坐下来,精神上的精神。 Sed ut justo   consectetur,cursus lorem vitae,accumsan lorem。 Cras eu odio   vulputate,rhoncus dui vel,aliquam lorem。 Fusce scelerisque facilisis   lacus,quis malesuada justo placerat nec。 Curabitur elementum mattis   nisl,sed sodales mauris congue et。 Nunc velit mauris,accumsan a   dictum vitae,pellentesque luctus leo。在venenatis orci的Maecenas。   Suspendisse sed neque magna。 Praesent vitae sapien porttitor diam   aliquam eleifend。 Maecenas lacinia elit non velit vehicula rutrum。桑达   ultricies mauris vitae dapibus tempor。 Praesent eros metus,euismod ut   est eget,rhoncus iaculis lorem。 Ut aliquet dictum ligula lobortis   的cursus。 Sed m​​attis ante ut odio tincidunt venenatis。 Donec euismod   quam sit amet velit tincidunt,ut convallis ligula tempor。 Quisque   tincidunt elit sem,quis laoreet orci accumsan in。

$mx = imagesx($im);   // Width of the created image
$my = imagesy($im);   // Height of the image

//TEXT VARS/////////
$main_text = $text;   // $text variable comes directly from the form
$main_text_size = 20; // $text font size

$words = explode(' ', $main_text);
$lines = array($words[0]);
$currentLine = 0;

    for($i = 1; $i < count($words); $i++)
    {
        $lineSize = imagettfbbox($main_text_size, 0, $font, $lines[$currentLine] . ' ' . $words[$i]);
        if($lineSize[2] - $lineSize[0] < ($mx-20))
        {
            $lines[$currentLine] .= ' ' . $words[$i];
        }
        else
        {
            $currentLine++;
            $lines[$currentLine] = $words[$i];
        }
    } 

$line_count = 1;
// Loop through the lines and place them on the image
foreach ($lines as $line)
{
    $line_box = imagettfbbox($main_text_size, 0, $font, "$line");
    $line_height = $line_box[1]-$line_box[7];
    $line_y = (($line_height+4) * $line_count);
    imagettftext($im, $main_text_size, 0, 5, $line_y, $black, $font, $line);

    // Increment Y so the next line is below the previous line
    $line_count ++;
}   

imagepng($im, 'image.png');
imagedestroy($im);

0 个答案:

没有答案