php-gd怎么填充矩形_php-gd填充实心矩形区域
在PHP中使用GD库进行图像处理时,填充实心矩形是最基础也是最常用的操作之一。无论是生成验证码、图表、水印还是动态图像,都需要精确地在画布上绘制彩色矩形。本文将详细介绍如何通过GD库的 imagefilledrectangle() 函数实现矩形填充,并提供完整的示例代码与参数说明。
1. 函数原型与参数说明
imagefilledrectangle() 用于在指定的图像资源上绘制一个填充颜色的矩形。其函数原型如下:
bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
参数解释:
$image:通过
imagecreatetruecolor()或imagecreate()创建的图像资源。$x1:矩形左上角的 x 坐标。
$y1:矩形左上角的 y 坐标。
$x2:矩形右下角的 x 坐标。
$y2:矩形右下角的 y 坐标。
$color:通过
imagecolorallocate()或imagecolorallocatealpha()分配的颜色标识符。
函数返回 true 表示成功,false 表示失败。
注意:坐标系统以图像左上角为原点,向右为 x 轴正方向,向下为 y 轴正方向。
当$x1 > $x2或$y1 > $y2时,GD 会自动交换坐标,保证矩形绘制正确。
2. 完整示例:创建并填充一个实心矩形
以下示例创建一个 200x100 的白色画布,然后绘制一个从左上方 (50,20) 到右下方 (150,80) 的蓝色实心矩形,最后将图片以 PNG 格式输出到浏览器。
<?php
// 创建 200x100 的真彩色图像
$image = imagecreatetruecolor(200, 100);
// 分配颜色
$white = imagecolorallocate($image, 255, 255, 255);
$blue = imagecolorallocate($image, 0, 0, 255);
// 用白色填充整个画布(背景色)
imagefill($image, 0, 0, $white);
// 绘制实心矩形:左上角 (50,20),右下角 (150,80)
imagefilledrectangle($image, 50, 20, 150, 80, $blue);
// 设置 Content-Type 头,输出 PNG 图像
header('Content-Type: image/png');
imagepng($image);
// 释放内存
imagedestroy($image);
?>运行上面的脚本,浏览器将显示一个白色背景,中央有一个蓝色矩形。
3. 使用透明度填充矩形
GD 支持通过 imagecolorallocatealpha() 为颜色分配透明度(alpha 值从 0 到 127,0 完全不透明,127 完全透明)。以下示例绘制一个半透明的红色矩形:
<?php
$image = imagecreatetruecolor(300, 200);
// 分配半透明红色(alpha = 80,半透明)
$redTransparent = imagecolorallocatealpha($image, 255, 0, 0, 80);
// 先画一个不透明的绿色背景作对比
$green = imagecolorallocate($image, 0, 255, 0);
imagefilledrectangle($image, 0, 0, 300, 200, $green);
// 绘制半透明红色矩形
imagefilledrectangle($image, 50, 50, 250, 150, $redTransparent);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>4. 扩展:绘制圆角矩形或镂空矩形
GD 没有直接绘制圆角矩形的函数,但可以通过 imagefilledarc() 和 imagefilledrectangle() 组合实现。若只需矩形边框(不填充内部),可使用 imagerectangle() 函数,其参数与 imagefilledrectangle() 相同,但只绘制边框。
<?php
$image = imagecreatetruecolor(200, 150);
$bg = imagecolorallocate($image, 255, 255, 200);
$red = imagecolorallocate($image, 255, 0, 0);
imagefill($image, 0, 0, $bg);
// 绘制一个红色矩形边框(不填充)
imagerectangle($image, 30, 30, 170, 120, $red);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>5. 常见问题与注意事项
颜色分配:每次使用
imagecolorallocate()都会占用调色板中的颜色位置。对于真彩色图像(imagecreatetruecolor()),颜色数量不受限制,但建议重用颜色变量。坐标边界:如果矩形的坐标超出图像边界,GD 会自动裁剪到图像范围内,不会报错。
图像输出:在
header()之前不能有任何输出(包括空格、BOM),否则图像无法正常显示。内存释放:始终使用
imagedestroy()释放图像资源,尤其是在循环中创建大量图像时。兼容性:
imagefilledrectangle()从 PHP 4.0.6 起可用,所有现代 PHP 版本均支持。
6. 总结
imagefilledrectangle() 是 PHP GD 库中绘制实心矩形的核心函数。通过掌握其参数含义和坐标规则,开发者可以快速创建各种颜色、尺寸和透明度的矩形区域。结合其他 GD 函数(如 imagecopymerge()、imagefilter() 等),还能实现更复杂的图像合成效果。在实际项目中,建议将颜色分配和图像资源管理封装成辅助函数,以提高代码的可读性和复用性。