imagepolygon

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

imagepolygon绘制多边形

描述

PHP 8.0.0 后的签名(不支持命名参数)

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

替代签名(从 PHP 8.1.0 开始弃用)

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

imagepolygon() 在给定的 image 中创建一个多边形。

参数

image

一个 GdImage 对象,由一个图像创建函数返回,例如 imagecreatetruecolor()

points

包含多边形顶点的数组,例如:

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

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 imagepolygon() 示例

<?php
// 创建一个空白图像
$image = imagecreatetruecolor(400, 300);

// 为多边形分配颜色
$col_poly = imagecolorallocate($image, 255, 255, 255);

// 绘制多边形
imagepolygon($image, array(
0, 0,
100, 200,
300, 200
),
3,
$col_poly);

// 将图片输出到浏览器
header('Content-type: image/png');

imagepng($image);
imagedestroy($image);
?>

上面的示例将输出类似于以下内容:

Output of example : imagepolygon()

参见

添加备注

用户贡献的备注 4 备注

4
tatlar at yahoo dot com
17 年前
获取五边形(五边形)或星形(五角星)坐标的函数。
<?php
function _makeFiveSidedStar( $x, $y, $radius, $shape='polygon', $spiky=NULL ) {
$point = 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 ; // 尖锐度,默认值为 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() ; // 新数组
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' ) ;
?>
2
licson0729 at gmail dot com
12 年前
绘制 n 边正多边形的函数

<?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);//测试绘制

header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>
-2
jsnell at networkninja dot com
23 年前
以下是一些用于旋转和平移多边形的实用程序例程。缩放也可以轻松添加。

<?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;
/* 数学:
[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;
}
?>
-6
licson0729 at gmail dot com
12 年前
这是一个绘制 n 边形星星的函数

<?php
function drawStar($img,$x,$y,$radius,$sides,$color,$spikness=0.5)
{
$point =array();
$t = 0;
for(
$a = 0;$a <= 360;$a += 360/($sides*2))
{
$t++;
if(
$t % 2 == 0)
{
$point[] = $x + ($radius * $spikness) * cos(deg2rad($a));
$point[] = $y + ($radius * $spikness) * sin(deg2rad($a));
}else{
$point[] = $x + $radius * cos(deg2rad($a));
$point[] = $y + $radius * sin(deg2rad($a));
}
}
return
imagepolygon($img,$point,$sides*2,$color);
}
?>
To Top