當前位置: 首頁> 最新文章列表> imageopenpolygon() 中坐標順序對閉合效果的影響

imageopenpolygon() 中坐標順序對閉合效果的影響

M66 2025-06-02

在使用PHP 處理圖像時, imageopenpolygon()是一個非常實用的函數,可以繪製出開放的多邊形路徑(即首尾不自動連接)。不過,很多朋友在使用它時可能會疑惑:

為了搞清楚這個問題,我們做了詳細的實測。下面帶大家一起看看。

什麼是imageopenpolygon()

在PHP 的GD 庫中, imageopenpolygon()用於繪製開放的多邊形線條。和imagepolygon()不同的是,它不會自動連接第一個點和最後一個點。

基本使用示例:

 <?php
// 創建畫布
$image = imagecreatetruecolor(400, 400);

// 設置背景色為白色
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

// 設置線條顏色為藍色
$blue = imagecolorallocate($image, 0, 0, 255);

// 定義點數組(順時針方向)
$points = [
    50, 50,  // 第一個點
    150, 50, // 第二個點
    150, 150,// 第三個點
    50, 150  // 第四個點
];

// 繪製開放多邊形
imageopenpolygon($image, $points, count($points) / 2, $blue);

// 輸出圖片
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

運行這段代碼後,你會看到一個U 形的開放四邊形,其中起點和終點之間不會連線

改變坐標順序看看效果

接下來我們把點的順序調整成逆時針方向

 $points = [
    50, 50,  // 第一個點
    50, 150, // 第二個點
    150, 150,// 第三個點
    150, 50  // 第四個點
];

再次運行,繪製出的形狀依然是開放的,只不過線條的走向不同

總結一

  • 坐標順序不會導致圖形閉合

  • 坐標順序只影響線條的繪製順序(也就是說,線條的走向會改變)。

那如果我想手動閉合呢?

如果想讓圖形看起來閉合,需要手動把第一個點再加一遍到數組末尾,比如這樣:

 $points = [
    50, 50,
    150, 50,
    150, 150,
    50, 150,
    50, 50 // 再加一次第一個點
];

這樣imageopenpolygon()繪製出來的圖形就會首尾連接,看起來就是一個閉合的多邊形了!

示例圖預覽

為了方便查看不同效果,這裡放一個示例圖地址:

(如果你想要自己生成,也可以直接用上面的PHP 代碼試試看哦。)

小結

  • imageopenpolygon()默認不閉合,無論坐標順序如何。

  • 如果需要閉合,需要自己在最後加上第一個點

  • 坐標順序影響的是線條繪製的走向,不是閉合行為。

希望這篇實測講解,能幫你在實際開發中快速理解和掌握imageopenpolygon()的小細節!