当前位置: 首页> 最新文章列表> imagefilledpolygon 函数中坐标数组的正确格式是什么?详细解释来了

imagefilledpolygon 函数中坐标数组的正确格式是什么?详细解释来了

gitbox 2025-09-12

imagefilledpolygon 函数中坐标数组的正确格式是什么?详细解释来了

在 PHP 中, 函数用于绘制一个填充的多边形,它通常用于生成图形、制作动态图表或创建简单的形状。要正确使用这个函数,最关键的一点就是“坐标数组”的格式。本文将详细解释坐标数组的正确写法和注意事项。

函数原型

</span><span><span>bool</span></span><span> </span><span><span class="function_ invoke__">imagefilledpolygon</span></span><span>(
    resource </span><span><span>$image</span></span><span>,
    </span><span><span>array</span></span><span> </span><span><span>$points</span></span><span>,
    </span><span><span>int</span></span><span> </span><span><span>$num_points</span></span><span>,
    </span><span><span>int</span></span><span> </span><span><span>$color</span></span><span>
)

参数说明:

坐标数组的正确格式

最重要的一点:坐标数组必须是一个一维数组,按照 x1, y1, x2, y2, x3, y3... 的顺序排列,每两个元素表示一个顶点的坐标。

示例:

</span><span><span>$points</span></span><span> = [
    </span><span><span>50</span></span><span>, </span><span><span>50</span></span><span>,   </span><span><span>// 第一个顶点 (x1, y1)</span></span><span>
    </span><span><span>150</span></span><span>, </span><span><span>50</span></span><span>,  </span><span><span>// 第二个顶点 (x2, y2)</span></span><span>
    </span><span><span>100</span></span><span>, </span><span><span>150</span></span><span>  </span><span><span>// 第三个顶点 (x3, y3)</span></span><span>
];
</span><span><span>$num_points</span></span><span> = </span><span><span>3</span></span><span>;

然后调用函数:

</span><span><span class="function_ invoke__">imagefilledpolygon</span></span><span>(</span><span><span>$image</span></span><span>, </span><span><span>$points</span></span><span>, </span><span><span>$num_points</span></span><span>, </span><span><span>$color</span></span><span>);

注意事项:

  1. 数组必须是一维的,不能使用二维数组来表示顶点,否则函数会报错。
  2. $num_points 必须等于顶点的数量,不是数组元素的数量。记住数组里有两个元素表示一个点。
  3. 坐标可以是整数或浮点数,但通常用整数表示像素位置。
  4. 数组中顶点的顺序会影响多边形的形状,建议按照顺时针或逆时针顺序排列。

完整示例

</span><span><span>$image</span></span><span> = </span><span><span class="function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span>200</span></span><span>, </span><span><span>200</span></span><span>);
</span><span><span>$white</span></span><span> = </span><span><span class="function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span>$image</span></span><span>, </span><span><span>255</span></span><span>, </span><span><span>255</span></span><span>, </span><span><span>255</span></span><span>);
</span><span><span>$blue</span></span><span>  = </span><span><span class="function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span>$image</span></span><span>, </span><span><span>0</span></span><span>, </span><span><span>0</span></span><span>, </span><span><span>255</span></span><span>);

</span><span><span>// 填充背景</span></span><span>
</span><span><span class="function_ invoke__">imagefill</span></span><span>(</span><span><span>$image</span></span><span>, </span><span><span>0</span></span><span>, </span><span><span>0</span></span><span>, </span><span><span>$white</span></span><span>);

</span><span><span>// 定义三角形顶点</span></span><span>
</span><span><span>$points</span></span><span> = [</span><span><span>50</span></span><span>, </span><span><span>50</span></span><span>, </span><span><span>150</span></span><span>, </span><span><span>50</span></span><span>, </span><span><span>100</span></span><span>, </span><span><span>150</span></span><span>];
</span><span><span>$num_points</span></span><span> = </span><span><span>3</span></span><span>;

</span><span><span>// 绘制填充多边形</span></span><span>
</span><span><span class="function_ invoke__">imagefilledpolygon</span></span><span>(</span><span><span>$image</span></span><span>, </span><span><span>$points</span></span><span>, </span><span><span>$num_points</span></span><span>, </span><span><span>$blue</span></span><span>);

</span><span><span>// 输出图片</span></span><span>
</span><span><span class="function_ invoke__">header</span></span><span>(</span><span><span>"Content-Type: image/png"</span></span><span>);
</span><span><span class="function_ invoke__">imagepng</span></span><span>(</span><span><span>$image</span></span><span>);
</span><span><span class="function_ invoke__">imagedestroy</span></span><span>(</span><span><span>$image</span></span><span>);

运行上述代码即可得到一个蓝色填充的三角形。

总结

使用 imagefilledpolygon() 时,坐标数组必须为一维数组,并且顶点按照 x, y 顺序排列。$num_points 对应的是顶点数量而不是数组长度。掌握这个格式,你就可以顺利绘制任意多边形。