我正在使用 imagettftext 制作一个条形图,在每个条形图的顶部,我想将值设置为

我为每个栏
设置了以下变量(实际上是矩形)
$x1$y1$x2$y2$imagesx$imagesy$font_size
另外,随着字符串长度的增加,字体大小应减小。

最佳答案

像这样做。记住将字体文件“arial.ttf”放置在当前目录中:

<?php
// Create a 650x150 image and create two colors
$im = imagecreatetruecolor(650, 150);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

// Set the background to be white
imagefilledrectangle($im, 0, 0, 649, 149, $white);

// Path to our font file
$font = './arial.ttf';

//test it out
for($i=2;$i<10;$i++)
    WriteTextForMe($im, $font, str_repeat($i, $i), -140 + ($i*80), 70 + rand(-30, 30), -160 + (($i+1)*80), 150, $black);

//this function does the magic
function WriteTextForMe($im, $font, $text, $x1, $y1, $x2, $y2, $allocatedcolor)
{
    //draw bars
    imagesetthickness($im, 2);
    imagerectangle($im, $x1, $y1, $x2, $y2, imagecolorallocate($im, 100,100,100));

    //draw text with dynamic stretching
    $maxwidth = $x2 - $x1;
    for($size = 1; true; $size+=1)
    {
        $bbox = imagettfbbox($size, 0, $font, $text);
        $width = $bbox[2] - $bbox[0];
        if($width - $maxwidth > 0)
        {
            $drawsize = $size - 1;
            $drawX = $x1 + $lastdifference / 2;
            break;
        }
        $lastdifference = $maxwidth - $width;
    }
    $size--;
    imagettftext($im, $drawsize, 0, $drawX, $y1 - 2, $allocatedcolor, $font, $text);
}

// Output to browser
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

它使用imagettfbbox函数获取文本的宽度,然后遍历字体大小以获取正确的大小,居中并显示它。

因此,它输出以下内容:

关于php - PHP GD ttftext中心对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3679014/

10-13 06:26