PHP 8.6.0 Beta 1 is available for testing

imagepolygon

(PHP 4, PHP 5, PHP 7, PHP 8)

imagepolygonDibuja un polígono

Descripción

Firma disponible a partir de PHP 8.0.0 (no soportada con argumentos nombrados)

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

Firma alternativa (deprecada a partir de PHP 8.1.0)

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

imagepolygon() dibuja un polígono en la imagen image.

Parámetros

image
Un objeto GdImage , retornado por una de las funciones de creación de imágenes, como imagecreatetruecolor() .
points

Un array que contiene los vértices del polígono, por ejemplo:

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

num_points

Número total de puntos (vértices), que deben ser al menos 3.

Si este argumento es omitido conforme a la segunda firma, points debe tener un número par de elementos, y num_points se asume como count($points)/2.
color

Un identificador de color creado con imagecolorallocate() .

Valores devueltos

Esta función retorna true en caso de éxito o false si ocurre un error.

Historial de cambios

Versión Descripción
8.1.0 El argumento num_points ha sido deprecado.
8.0.0 image ahora espera una instancia de GdImage ; anteriormente, se esperaba un recurso gd de tipo resource válido.

Ejemplos

Ejemplo #1 Ejemplo con imagepolygon()

<?php
// Creación de una imagen vacía
$image = imagecreatetruecolor(400, 300);
// Asigna un color para el polígono
$col_poly = imagecolorallocate($image, 255, 255, 255);
// Dibuja el polígono
imagepolygon($image, array(
 0, 0,
 100, 200,
 300, 200
 ),
 $col_poly);
// Muestra la imagen en el navegador
header('Content-type: image/png');
imagepng($image);
?>

Resultado del ejemplo anterior es similar a:

Véase también

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 3 notes

up
3
tatlar at yahoo dot com
19 years ago
Function to get 5-sided polygon (pentagon) or star (pentagram) co-ords. 
<?php
function _makeFiveSidedStar( $x, $y, $radius, $shape='polygon', $spiky=NULL ) {
 $point = array() ; // new array 
 $angle = 360 / 5 ; 
 $point[0]['x'] = $x ; 
 $point[0]['y'] = $y - $radius ; 
 $point[2]['x'] = $x + ( $radius * cos( deg2rad( 90 - $angle ) ) ) ; 
 $point[2]['y'] = $y - ( $radius * sin( deg2rad( 90 - $angle ) ) ) ;
 $point[4]['x'] = $x + ( $radius * sin( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
 $point[4]['y'] = $y + ( $radius * cos( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
 $point[6]['x'] = $x - ( $radius * sin( deg2rad( 180 - ( $angle*2 ) ) ) ) ; 
 $point[6]['y'] = $y + ( $radius * cos( deg2rad( 180 - ( $angle*2 ) ) ) ) ;
 $point[8]['x'] = $x - ( $radius * cos( deg2rad( 90 - $angle ) ) ) ; 
 $point[8]['y'] = $y - ( $radius * sin( deg2rad( 90 - $angle ) ) ) ;
 if( $shape == 'star' ) {
 if( $spiky == NULL ) $spiky = 0.5 ; // degree of spikiness, default to 0.5
 $indent = $radius * $spiky ;
 $point[1]['x'] = $x + ( $indent * cos( deg2rad( 90 - $angle/2 ) ) ) ; 
 $point[1]['y'] = $y - ( $indent * sin( deg2rad( 90 - $angle/2 ) ) ) ; 
 $point[3]['x'] = $x + ( $indent * sin( deg2rad( 180 - $angle ) ) ) ; 
 $point[3]['y'] = $y - ( $indent * cos( deg2rad( 180 - $angle ) ) ) ;
 $point[5]['x'] = $x ; 
 $point[5]['y'] = $y + ( $indent * sin( deg2rad( 180 - $angle ) ) ) ;
 $point[7]['x'] = $x - ( $indent * sin( deg2rad( 180 - $angle ) ) ) ; 
 $point[7]['y'] = $y - ( $indent * cos( deg2rad( 180 - $angle ) ) ) ; 
 $point[9]['x'] = $x - ( $indent * cos( deg2rad( 90 - $angle/2 ) ) ) ; 
 $point[9]['y'] = $y - ( $indent * sin( deg2rad( 90 - $angle/2 ) ) ) ;
 }
 ksort( $point ) ;
 $coords = array() ; // new array 
 foreach( $point as $pKey=>$pVal ) { 
 if( is_array( $pVal ) ) { 
 foreach( $pVal as $pSubKey=>$pSubVal ) { 
 if( !empty( $pSubVal ) ) array_push( $coords, $pSubVal ) ; 
 } 
 } 
 }
 return $coords ;
}
$values = _makeFiveSidedStar( 100, 100, 50, 'star' ) ;
?>
up
2
licson0729 at gmail dot com
14 years ago
Function to draw a n-sided regular polygon
<?php
$img = imagecreatetruecolor(1360,768);
function regularPolygon($img,$x,$y,$radius,$sides,$color)
{
 $points = array();
 for($a = 0;$a <= 360; $a += 360/$sides)
 {
 $points[] = $x + $radius * cos(deg2rad($a));
 $points[] = $y + $radius * sin(deg2rad($a));
 }
 return imagepolygon($img,$points,$sides,$color);
}
regularPolygon($img,1360/2,768/2,300,8,0xffffff);//Test draw
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>
up
-2
jsnell at networkninja dot com
25 years ago
Here are some handy routines for rotation and translation of polygons. Scaling could be added easily as well.
<?php
function translate_point(&$x,&$y,$angle,$about_x,$about_y,$shift_x,$shift_y)
{
 $x -= $about_x;
 $y -= $about_y;
 $angle = ($angle / 180) * M_PI;
/* math:
[x2,y2] = [x, * [[cos(a),-sin(a)],
 y] [sin(a),cos(a)]]
==>
x = x * cos(a) + y*sin(a) 
y = x*-sin(a) + y*cos(a)
*/
 $new_x = $x * cos($angle) - $y * sin($angle);
 $new_y = $x * sin($angle) + $y * cos($angle);
 $x = $new_x+ $about_x + $shift_x ;
 $y = $new_y + $about_y + $shift_y;
}
function translate_poly($point_array, $angle, $about_x, $about_y,$shift_x,$shift_y)
{
 $translated_poly = Array();
 while(count($point_array) > 1)
 {
 $temp_x = array_shift($point_array);
 $temp_y = array_shift($point_array);
 translate_point($temp_x, $temp_y, $angle, $about_x, $about_y,$shift_x, $shift_y);
 array_push($translated_poly, $temp_x);
 array_push($translated_poly, $temp_y);
 }
 return $translated_poly;
}
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /