imagefilltoborder()는 PHP에 내장된 GD 라이브러리 함수로, 지정한 경계 색상(border)을 기준으로 특정 색상으로 플러드 필(flood fill, 영역 채우기)을 수행합니다. 채우기의 시작 좌표는 (x, y)이며, 이미지의 기준점인 왼쪽 상단은 (0, 0)입니다. 이 함수는 경계 색상을 만나기 전까지 연결된 영역 전체를 지정한 색상으로 채워 넣습니다.
문법(Syntax)
bool imagefilltoborder(resource $image, int $x, int $y, int $border, int $color)
매개변수(Parameters)
imagefilltoborder() 함수는 다섯 개의 매개변수를 받습니다: $image, $x, $y, $border, $color.
$image − 작업 대상이 되는 이미지 리소스입니다. imagecreatetruecolor()나 imagecreatefromgif() 같은 함수로 생성한 값입니다.
$x − 채우기를 시작할 x좌표를 지정합니다.
$y − 채우기를 시작할 y좌표를 지정합니다.
$border − 경계(테두리) 색상을 지정합니다. 이 색상을 만나면 채우기가 중단됩니다.
$color − 영역을 채울 실제 색상을 지정합니다.
반환값(Return Values)
성공 시 true를 반환하고, 실패 시 false를 반환합니다.
예제 1: GIF 이미지 배경 채우기
<?php
// 로컬 드라이브 폴더에서 GIF 이미지를 불러옵니다.
$img = imagecreatefromgif('C:\xampp\htdocs\Images\img39.gif');
// 경계 색상과 채우기 색상을 생성합니다.
$borderColor = imagecolorallocate($img, 0, 200, 0);
$fillColor = imagecolorallocate($img, 122, 122, 122);
(0, 0) 위치부터 경계까지 채웁니다.
imagefilltoborder($img, 0, 0, $borderColor, $fillColor);
// 결과 이미지를 출력합니다.
header('Content-type: image/gif');
imagepng($img);
?>실행 결과
imagefilltoborder() 함수 적용 전 GIF 이미지:

imagefilltoborder() 함수 적용 후 GIF 이미지:

위 예제에서는 초록색(RGB 0, 200, 0)을 경계 색상으로 설정하고, 회색(RGB 122, 122, 122)으로 영역을 채웠습니다. 시작점 (0, 0)에서 출발하여 경계 색상을 만날 때까지 인접한 픽셀들이 모두 회색으로 변경된 것을 확인할 수 있습니다.
예제 2: 타원 내부를 색상으로 채우기
<?php
// 새 이미지를 생성하고 배경을 회색으로 설정합니다.
$img = imagecreatetruecolor(700, 500);
imagefilledrectangle($img, 0, 0, 500, 500, imagecolorallocate($img, 122, 122, 122));
// 검은색 테두리를 가진 타원을 그립니다.
imageellipse($img, 300, 300, 300, 300, imagecolorallocate($img, 0, 0, 0));
// 경계 색상과 채우기 색상을 파란색 계열로 설정합니다.
$border = imagecolorallocate($img, 0, 0, 0);
$fill = imagecolorallocate($img, 0, 0, 255);
// 타원 내부를 채웁니다.
imagefilltoborder($img, 300, 300, $border, $fill);
// 결과 이미지를 출력하고 메모리를 해제합니다.
header('Content-type: image/gif');
imagepng($img);
imagedestroy($img);
?>실행 결과

이 예제에서는 검은색 테두리로 그린 타원의 중심점 (300, 300)을 시작점으로 지정했습니다. imagefilltoborder()가 검은 테두리를 경계로 인식하고, 타원 내부만 파란색(RGB 0, 0, 255)으로 채운 결과를 볼 수 있습니다.
정리
imagefilltoborder()는 imagefill()과 유사하지만, 결정적인 차이가 있습니다. imagefill()은 시작점과 동일한 색상의 영역만 채우는 반면, imagefilltoborder()는 지정한 경계 색상을 만날 때까지 색상과 관계없이 채웁니다. 따라서 복잡한 도형이나 다양한 색상이 섞인 영역을 한 번에 처리해야 할 때 매우 유용합니다. 작업이 끝난 후에는 imagedestroy()를 호출하여 메모리를 해제하는 것이 좋은 습관입니다.