在PHP中的imagefilledrectangle()函数

在PHP中,imagefilledrectangle() 函数可用于在指定的图像上绘制填充矩形。这个函数是在 GD 库版本 1.8.3 或以上版本中引入的。

1. 函数语法

imagefilledrectangle() 函数的语法如下:

bool imagefilledrectangle ( 

resource $image ,

int $x1 ,

int $y1 ,

int $x2 ,

int $y2 ,

int $color

);

参数说明:

- image:必需参数,指定图像资源。

- x1:必需参数,指定矩形左上角的 X 坐标。

- y1:必需参数,指定矩形左上角的 Y 坐标。

- x2:必需参数,指定矩形右下角的 X 坐标。

- y2:必需参数,指定矩形右下角的 Y 坐标。

- color:必需参数,指定填充的颜色。可以是 imagecolorallocate() 函数返回的颜色标记,也可以是 RGB 值(16 进制)。

2. 函数用法

imagefilledrectangle() 函数用途很广泛,常用于生成图形验证码、实现矩形的填充、生成图表等一系列应用场景。下面我们来看一些常用的示例。

2.1 生成矩形图形

首先,我们需要创建一幅画布用于绘制矩形。代码如下:

$image = imagecreatetruecolor(500, 500);

$color = imagecolorallocate($image, 255, 255, 255); // 设置背景色

imagefill($image, 0, 0, $color); // 设置填充颜色

接着,我们可以使用 imagefilledrectangle() 函数创建一个填充矩形。下面的代码可以绘制一个黑色的填充矩形。

// 创建一个黑色矩形

$black = imagecolorallocate($image, 0, 0, 0);

imagefilledrectangle($image, 50, 50, 450, 450, $black);

// 输出图像

header('Content-type: image/png');

imagepng($image);

// 销毁图像资源

imagedestroy($image);

上述代码的效果如下图所示:

![image](https://cdn.luogu.com.cn/upload/image_hosting/cmk7atl9.png)

我们可以通过调整 imagefilledrectangle() 函数的参数,来改变生成的矩形的位置、大小和颜色。例如,下面的代码绘制了一个红色边框、蓝色填充、位于画布中心的矩形:

$image = imagecreatetruecolor(500, 500);

$background = imagecolorallocate($image, 255, 255, 255);

$border_color = imagecolorallocate($image, 255, 0, 0);

$fill_color = imagecolorallocate($image, 0, 0, 255);

imagefill($image, 0, 0, $background);

imagefilledrectangle($image, 125, 125, 375, 375, $fill_color);

imagerectangle($image, 125, 125, 375, 375, $border_color);

header('Content-type: image/png');

imagepng($image);

imagedestroy($image);

上述代码的效果如下图所示:

![image](https://cdn.luogu.com.cn/upload/image_hosting/0kkit0bc.png)

2.2 生成图形验证码

图形验证码是现在很多网站用来防止机器人恶意登录或填写恶意数据的一种方式。使用 imagefilledrectangle() 函数,我们可以很方便地生成具有一定难度的图形验证码。

下面的代码演示了如何使用 imagefilledrectangle() 函数生成一个简单的图形验证码。验证码包含四个随机数字和一个黑色的填充矩形。

$image = imagecreatetruecolor(120, 40);

$background = imagecolorallocate($image, 255, 255, 255);

$border_color = imagecolorallocate($image, 0, 0, 0);

imagefill($image, 0, 0, $background);

for ($i = 0; $i < 4; $i++) {

$rand_num = rand(0, 9);

$pos_x = 20 * $i + rand(-5, 5);

$pos_y = rand(10, 30);

$text_color = imagecolorallocate($image, rand(0, 127), rand(0, 127), rand(0, 127));

imagestring($image, 5, $pos_x, $pos_y, $rand_num, $text_color);

}

$black = imagecolorallocate($image, 0, 0, 0);

for ($i = 0; $i < 10; $i++) {

imagefilledrectangle($image, rand(1, 119), rand(1, 39), rand(1, 119), rand(1, 39), $black);

}

imagerectangle($image, 0, 0, 119, 39, $border_color);

header('Content-type: image/png');

imagepng($image);

imagedestroy($image);

上述代码的效果如下图所示:

![image](https://cdn.luogu.com.cn/upload/image_hosting/bzp2orii.png)

3. 注意点

使用 imagefilledrectangle() 函数绘制填充矩形时,需要注意以下几点:

- 矩形的坐标是指矩形左上角和右下角的坐标。

- 坐标系的原点是图像的左上角。

- 需要先创建一个画布(imagecreatetruecolor() 函数),然后才能在画布上进行绘制。

- 需要使用 imagefill() 函数设置画布的背景色。

- 可以使用 RGB 值或者 imagecolorallocate() 函数返回的颜色标记来设置颜色。

- 在绘制验证码时,需要使用 imagestring() 函数绘制文本。

后端开发标签