(PHP 7 >= 7.2.0, PHP 8)

imageopenpolygonDraws an open polygon


Signature as of PHP 8.0.0 (not supported with named arguments)

imageopenpolygon(GdImage $image, array $points, int $color): bool

Alternative signature (deprecated as of PHP 8.1.0)

    GdImage $image,
    array $points,
    int $num_points,
    int $color
): bool

imageopenpolygon() draws an open polygon on the given image. Contrary to imagepolygon(), no line is drawn between the last and the first point.

Elenco dei parametri


Una risorsa immagine, restituita da una delle funzioni di creazione immagine, come imagecreatetruecolor().


An array containing the polygon's vertices, e.g.:

points[0] = x0
points[1] = y0
points[2] = x1
points[3] = y1


Total number of points (vertices), which must be at least 3.

If this parameter is omitted as per the second signature, points must have an even number of elements, and num_points is assumed to be count($points)/2.

A color identifier created with imagecolorallocate().

Valori restituiti

Restituisce true in caso di successo, false in caso di fallimento.

Log delle modifiche

Versione Descrizione
8.1.0 The parameter num_points has been deprecated.
8.0.0 image expects a GdImage instance now; previously, a resource was expected.


Example #1 imageopenpolygon() example

// Create a blank image
$image imagecreatetruecolor(400300);

// Allocate a color for the polygon
$col_poly imagecolorallocate($image255255255);

// Draw the polygon
imageopenpolygon($image, array(
0,   0,

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


Il precedente esempio visualizzerĂ  qualcosa simile a:

Output of example : imageopenpolygon()

Vedere anche:

add a note add a note

User Contributed Notes 1 note

marco at oostende dot nl
3 years ago
In case you want to use an open polygon but are stuck with a PHP version prior to 7.2, a solution may be to 'backplot' your array to its original start. Say you have an array of pixels (below seperated by commas)

= array();
for (
$i = 0; $i < count($pixels); $i++) {
$pixel = explode(',', $pixels[$i]);
    if ((
$pixel[0] > 0) && ($pixel[1] > 0)) {
$arr[] = $pixel[0];
$arr[] = $pixel[1];
imagepolygon($im, $arr, (count($arr) / 2), $otcolor);

you can replace this by something like

= array();
for (
$i = 0; $i < count($pixels); $i++) {
$pixel = explode(',', $pixels[$i]);
$arr[] = $pixel[0];
$arr[] = $pixel[1];
// imageopenpolygon($im, $arr, (count($arr) / 2), $otcolor) is not possible, so...
for ($i = (count($pixels)-1); $i >= 0; $i--) {
$pixel = explode(',', $pixels[$i]);
$arr[] = $pixel[0];
$arr[] = $pixel[1];
imagepolygon($im, $arr, (count($arr) / 2), $otcolor);
To Top