PHP의 imagecolorclosest() 함수는 이미지 팔레트 안에서 지정한 RGB 색상과 가장 가까운 색상의 인덱스를 찾아 반환하는 GD 라이브러리 함수입니다. 트루컬러(true color) 이미지를 팔레트 기반 이미지로 변환한 뒤, 원하는 색상에 가장 근접한 색을 검색할 때 유용하게 활용됩니다.
문법
imagecolorclosest ( img, red, green, blue )
매개변수
img: imagecreatetruecolor() 또는 imagecreatefrompng() 등으로 생성한 이미지 리소스입니다.
red: 빨간색(Red) 색상 성분 값입니다.
green: 초록색(Green) 색상 성분 값입니다.
blue: 파란색(Blue) 색상 성분 값입니다.
반환값
imagecolorclosest() 함수는 이미지 팔레트에서 지정한 색상과 가장 가까운 색상의 인덱스를 반환합니다. 팔레트에 정확히 일치하는 색상이 없더라도 항상 가장 근접한 색의 인덱스가 반환됩니다.
예제 1
PNG 이미지를 불러와 팔레트 이미지로 변환한 후, RGB 값 (20, 90, 140)과 가장 가까운 색상을 찾는 예제입니다.
<?php
$img = imagecreatefrompng('https://www.tutorialspoint.com/assets/videos/courses/19/images/course_19_image.png');
imagetruecolortopalette($img, false, 255);
$val = imagecolorclosest($img, 20, 90, 140);
$val = imagecolorsforindex($img, $val);
$val = "({$val['red']}, {$val['green']}, {$val['blue']})";
echo "Closest = " . $val;
imagedestroy($img);
?>
출력 결과
Closest = (44, 118, 140)
위 예제의 실행 흐름은 다음과 같습니다. 먼저 imagecreatefrompng()로 PNG 파일에서 이미지를 생성하고, imagetruecolortopalette() 함수로 최대 255색의 팔레트 이미지로 변환합니다. 그다음 imagecolorclosest()를 호출해 (20, 90, 140)에 가장 가까운 색상의 인덱스를 구하고, imagecolorsforindex()로 해당 인덱스의 실제 RGB 값을 확인합니다. 마지막으로 imagedestroy()를 통해 메모리에서 이미지 리소스를 해제합니다.
예제 2
이번에는 다른 이미지와 다른 색상 성분 값을 사용해 보겠습니다.
<?php
$img = imagecreatefrompng('https://www.tutorialspoint.com/images/Swift.png');
imagetruecolortopalette($img, false, 255);
$val = imagecolorclosest($img, 10, 130, 80);
$val = imagecolorsforindex($img, $val);
$val = "({$val['red']}, {$val['green']}, {$val['blue']})";
echo "Closest = " . $val;
imagedestroy($img);
?>
출력 결과
Closest = (228, 74, 76)
두 번째 예제에서는 (10, 130, 80) 색상과 가장 가까운 색을 찾았으며, 결과적으로 (228, 74, 76)이 반환되었습니다. 이처럼 imagecolorclosest() 함수는 요청한 색상이 팔레트에 존재하지 않는 경우에도 가장 유사한 색상을 자동으로 매칭해 주기 때문에, 제한된 색상 수의 팔레트 이미지에서 색상 대체 처리나 색 분석 작업에 활용할 수 있습니다.