imagefilltoborder

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

imagefilltoborder填充到特定颜色的边界

描述

imagefilltoborder(
    GdImage $image,
    int $x,
    int $y,
    int $border_color,
    int $color
): bool

imagefilltoborder() 执行一个填充操作,其边界颜色由 border_color 定义。填充的起点是 x, y (左上角是 0, 0),区域用颜色 color 填充。

参数

image

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

x

起始点的 x 坐标。

y

起始点的 y 坐标。

border_color

边界颜色。使用 imagecolorallocate() 创建的颜色标识符。

color

填充颜色。使用 imagecolorallocate() 创建的颜色标识符。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.0.0 image 现在需要一个 GdImage 实例;以前需要一个有效的 gd resource

范例

示例 #1 用颜色填充椭圆

<?php
// 创建图像句柄,将背景设置为白色
$im = imagecreatetruecolor(100, 100);
imagefilledrectangle($im, 0, 0, 100, 100, imagecolorallocate($im, 255, 255, 255));

// 绘制一个用黑色边框填充的椭圆
imageellipse($im, 50, 50, 50, 50, imagecolorallocate($im, 0, 0, 0));

// 设置边框和填充颜色
$border = imagecolorallocate($im, 0, 0, 0);
$fill = imagecolorallocate($im, 255, 0, 0);

// 填充选择区域
imagefilltoborder($im, 50, 50, $border, $fill);

// 输出并释放内存
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

上面的示例将输出类似于

Output of example : Filling an ellipse with a color

注释

该算法不会显式地记住哪些像素已经被设置,而是从像素的颜色推断出来,因此它无法区分新设置的像素和已经存在的像素。这意味着选择图像中已使用的任何填充颜色可能会产生不希望的结果。

添加注释

用户贡献的注释 2 个注释

1
edrad at wanadoo dot fr
21 年前
非常有用,可以构建一个具有颜色渐变的伪球体...

<?php
$width
= 300;
$center = $width / 2;
$colordivs = 255 / $center;
$im = @imagecreate($width, $width);
$back_color = imagecolorallocate($im, 20, 30, 40);
imagefill($im, 0, 0, $back_color);
for (
$i = 0; $i <= $center; $i++)
{
$diametre = $width - 2 * $i;
$el_color = imagecolorallocate($im, $i * $colordivs, 0, 0);
imagearc($im, $center, $center, $diametre, $diametre, 0, 360, $el_color);
imagefilltoborder($im, $center, $center, $el_color, $el_color);
}
imagepng($im);
?>

暗黑骷髅软件
http://www.darkskull.net
0
admin at worldlanguages dot tk
19 年前
在下面的示例中,对于那些拥有较新 GD 版本的人来说,用以下内容替换

imagearc($im, $center, $center, $diametre, $diametre, 0, 360, $el_color);

更合理

imageellipse($im, $center, $center, $diametre, $diametre, $el_color);

这显然更简单。
To Top