當前位置: 首頁> 最新文章列表> imagefilledpolygon 函數中坐標數組的正確格式是什麼?詳細解釋來了

imagefilledpolygon 函數中坐標數組的正確格式是什麼?詳細解釋來了

gitbox 2025-09-12

imagefilledpolygon 函數中坐標數組的正確格式是什麼?詳細解釋來了

在PHP 中, 函數用於繪製一個填充的多邊形,它通常用於生成圖形、製作動態圖表或創建簡單的形狀。要正確使用這個函數,最關鍵的一點就是“坐標數組”的格式。本文將詳細解釋坐標數組的正確寫法和注意事項。

函數原型

<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>
)
</span><p>參數說明:</p><ul><li> <span class="fun">$image</span> :圖像資源,由<span class="fun"><a href="/zh-tw/php/imagecreatetruecolor.html" target="_blank">imagecreatetruecolor()</a></span>或<span class="fun"><a href="/zh-tw/php/imagecreate.html" target="_blank">imagecreate()</a></span>創建。</li><li> <span class="fun">$points</span> :坐標數組,定義多邊形的各個頂點。</li><li> <span class="fun">$num_points</span> :頂點數量。</li><li> <span class="fun">$color</span> :多邊形填充顏色,由<span class="fun"><a href="/zh-tw/php/imagecolorallocate.html" target="_blank">imagecolorallocate()</a></span>創建。</li></ul><h2>坐標數組的正確格式</h2><p><strong>最重要的一點:</strong>坐標數組必須是一個一維數組,按照<span class="fun">x1, y1, x2, y2, x3, y3...</span>的順序排列,每兩個元素表示一個頂點的坐標。</p><p>示例:</p><pre>
<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><p>然後調用函數:</p><pre>
<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>);
</span><p>注意事項:</p><ol><li>數組必須是一維的,不能使用二維數組來表示頂點,否則函數會報錯。</li><li> <span class="fun">$num_points</span>必須等於頂點的數量,不是數組元素的數量。記住數組裡有兩個元素表示一個點。</li><li>坐標可以是整數或浮點數,但通常用整數表示像素位置。</li><li>數組中頂點的順序會影響多邊形的形狀,建議按照順時針或逆時針順序排列。</li></ol><h2>完整示例</h2><pre>
<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>);
</span><p>運行上述代碼即可得到一個藍色填充的三角形。</p><h2>總結</h2><p>使用<span class="fun">imagefilledpolygon()</span>時,坐標數組必須為一維數組,並且頂點按照<span class="fun">x, y</span>順序排列。 <span class="fun">$num_points</span>對應的是頂點數量而不是數組長度。掌握這個格式,你就可以順利繪製任意多邊形。</p></div></div>