当前位置: 首页> 最新文章列表> 结合字符统计和 imagefontwidth() 绘制文字柱状图

结合字符统计和 imagefontwidth() 绘制文字柱状图

M66 2025-05-28

在 Web 开发中,绘制图表是一项常见的需求,尤其是在展示统计数据时。虽然有许多专业的图表库,但有时候我们只需要用简单的文字和 PHP 的内置函数来快速实现一个直观的柱状图。本文将介绍如何结合字符统计和 PHP 的 imagefontwidth() 函数,利用 GD 库绘制一个简单的文字柱状图。

一、核心思路

柱状图的横轴用文字表示类别,纵轴用文字字符表示数值的大小。我们通过统计字符串中字符的数量,结合 imagefontwidth() 函数计算单个字符宽度,从而动态绘制每个柱子的宽度。

二、准备工作

确保你的 PHP 环境支持 GD 库,通常只需开启 php_gd2 扩展即可。

三、关键函数介绍

  • imagefontwidth(int $font): int
    返回内置字体的字符宽度。GD 库内置了几种字体(1 到 5),大小和宽度各不相同。

  • imagestring(resource $image, int $font, int $x, int $y, string $string, int $color): bool
    在图像中绘制字符串。

四、示例代码

下面用一个简单示例演示如何绘制文字柱状图:

<?php
// 数据样例,类别 => 数值(用字符长度表示)
$data = [
    '苹果' => 5,
    '香蕉' => 8,
    '橘子' => 3,
    '葡萄' => 6,
    '梨子' => 4,
];

// 画布大小
$width = 400;
$height = 300;

// 创建真彩色图像
$image = imagecreatetruecolor($width, $height);

// 颜色定义
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);

// 填充背景色
imagefill($image, 0, 0, $white);

// 选择字体大小(1 到 5)
$font = 5;
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);

// 计算柱子间距
$barSpacing = 10;

// 定义起始绘制坐标
$xStart = 50;
$yStart = 50;

// 最大柱子长度(字符数量映射为像素)
$maxLength = max($data);
$maxBarWidth = 200;

// 遍历数据绘制柱状图
foreach ($data as $label => $value) {
    // 计算柱子宽度,基于最大数值缩放
    $barWidth = intval($value / $maxLength * $maxBarWidth);

    // 绘制柱子(用蓝色矩形)
    imagefilledrectangle($image, $xStart, $yStart, $xStart + $barWidth, $yStart + $fontHeight, $blue);

    // 绘制类别文字(在柱子左侧)
    imagestring($image, $font, $xStart - strlen($label) * $fontWidth - 10, $yStart, $label, $black);

    // 绘制数值文字(在柱子右侧)
    imagestring($image, $font, $xStart + $barWidth + 5, $yStart, str_repeat('|', $value), $black);

    // 下一条柱子纵坐标下移
    $yStart += $fontHeight + $barSpacing;
}

// 输出图片头部
header('Content-Type: image/png');
imagepng($image);

// 释放内存
imagedestroy($image);
?>

五、代码说明

  • $data 数组定义了各类别及其对应的数值。数值越大,柱子越长。

  • 使用 imagefontwidth() 获取字符宽度,保证文字和柱子长度计算精准。

  • imagefilledrectangle() 绘制柱状矩形。

  • imagestring() 绘制类别名称和用 | 字符表示的数值柱状图。

  • 动态计算柱子宽度,柱子长度与最大数值成比例。

六、效果展示

运行上述 PHP 脚本后,会生成一张 PNG 图片,显示简单的文字柱状图,横向排列的蓝色柱子表示数值大小,左侧是类别名称,右侧是用竖线字符表示的数值条。


此方法适合对图形要求不高,或需要快速生成简单统计图的场景。结合更多 GD 函数,也能绘制更复杂的图形和图表。

如果你想进一步优化,比如加坐标轴、标题、动态字体,可以在此基础上扩展。