(PHP 7 >= 7.2.0, PHP 8)
imageopenpolygon — Рисует открытый полигон
Сигнатура с PHP 8.0.0 (не поддерживается с именованными аргументами)
Альтернативная сигнатура (устарела с PHP 8.0.0)
Функция imageopenpolygon() рисует открытый полигон на изображении image.
Функция не рисует линию между последней и первой точкой, в отличие от функции imagepolygon() .
imagepointsМассив с вершинами многоугольника, например:
num_pointsОбщее число точек, вершин, в виде значения не меньше 3.
При вызове функции согласно сигнатуре без этого параметра массивpoints должен содержать чётное количество
элементов, тогда значение параметра num_points
функция вычислит как count($points) / 2.
colorИдентификатор цвета, который добавила в палитру изображения функция imagecolorallocate() .
Функция возвращает true , если выполнилась успешно, или false , если возникла ошибка.
| Версия | Описание |
|---|---|
| 8.1.0 |
Параметр num_points устарел.
|
| 8.0.0 |
Параметр image теперь принимает объект GdImage ;
раньше параметр принимал корректный gd-ресурс (resource ).
|
Пример #1 Пример отрисовки открытого полигона функцией imageopenpolygon()
<?php
// Создаём пустое изображение
$image = imagecreatetruecolor(400, 300);
// Выделяем цвет для полигона
$col_poly = imagecolorallocate($image, 255, 255, 255);
// Отрисовываем полигон
imageopenpolygon(
$image,
array(
0,
0,
100,
200,
300,
200
),
$col_poly
);
// Выводим изображение в браузер
header('Content-type: image/png');
imagepng($image);
?>Вывод приведённого примера будет похож на:
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)
<?php
$arr = 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
<?php
$arr = 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);
?>