PHP Japan Conference 2024

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 条注释

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);
?>

暗骷髅软件 (Àn kùlóu ruǎnjiàn)
http://www.darkskull.net
admin at worldlanguages dot tk
20年前 (20 nián qián)
在下面的例子中,对于使用较新GD版本的用户,最好将

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

替换为

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

这显然更简单。
To Top