imageColorResolve () 는 GD 라이브러리를 사용하여 PHP에서 이미지를 처리 할 때 매우 실용적인 기능입니다. 기능은 이미지 팔레트에서 지정된 색상에 가장 가까운 인덱스를 찾아 정확히 일치하는 경우 색상의 색인을 반환합니다. 그렇지 않으면 색상 차이에 따라 가장 가까운 색상을 선택하십시오.
이것은 단순 해 보이지만 실제로는 매우 절묘한 색상 일치 알고리즘을 포함합니다.
먼저 기본 사용법을 살펴 보겠습니다.
<?php
// 팔레트 이미지를 만듭니다
$image = imagecreate(100, 100);
// 여러 색상을 할당합니다
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
// 이제 나는 빨간색에 가까운 색상을 찾고 싶다
$colorIndex = imagecolorresolve($image, 250, 10, 10);
echo "발견 된 색 지수는입니다:$colorIndex";
// 이미지 표시
header('Content-Type: image/png');
imagepng($image);
// 이미지 자원을 파괴하십시오
imagedestroy($image);
?>
이 예에서는 (250, 10, 10)에 가까운 색상을 찾고자합니다. 이미지 팔레트에 (255, 0, 0) 빨간색이 있으므로 imageColorResolve ()는 빨간색 색인을 반환합니다.
더 많은 공식 사례를 알고 싶다면 공식 M66.NET 문서를 참조하십시오.
그렇다면 imageColorResolve ()는 어떻게 내부적으로 색상 일치를 달성합니까?
팔레트 모드의 GD 이미지는 다양한 색상을 유지합니다. 각 색상은 RGB 구성 요소를 기록합니다. imageColorResolve () 호출되면 전체 팔레트를 반복하고 요청 된 색상과 기존 색상 의 색상 차이를 하나씩 계산합니다.
색상 차이는 일반적으로 유클리드 거리 에 의해 계산됩니다. 공식은 다음과 같습니다.
distance = (r1 - r2)2 + (g1 - g2)2 + (b1 - b2)2
여기서 (R1, G1, B1)은 대상 색상이고 (R2, G2, B2)는 팔레트의 색상입니다.
이 방법은 제곱이 아니며 (크기와 비교할 때만 생략하면 제곱을 생략하면 성능을 향상시킬 수 있습니다), 가장 작은 차이는 "가장 가까운"색상으로 간주됩니다.
트래버스 중에 색상이 정확히 동일 하다는 것을 알게되면 (즉, 세 개의 RGB 구성 요소가 정확히 동일합니다) GD 라이브러리는 즉시 검색을 중지하고 색 인덱스로 돌아갑니다. 이것은 성능을 크게 향상시킵니다.
정확히 일치하는 색상이 발견되지 않고 팔레트를위한 공간이 있으면 imageColorResolve () 도 새 색상을 직접 할당 할 수도 있습니다. 이 동작은 imageColorAllocate () 와 유사하지만 팔레트가 가득 차면 가장 가까운 기존 색상 만 선택할 수 있습니다.
큰 팔레트가있는 이미지의 경우 imageColorResolve ()는 모든 색상을 통한 반복이 필요하기 때문에 약간 느리게됩니다.
imageColorResolve () 호출의 수를 줄이기 위해 프로그램 효율성을 향상시키기 위해 공통 색상 지수를 미리 유지할 수 있습니다.
ImageColorResolve ()는 특히 팔레트 이미지에서 색상 관리가 수행 될 때 GD 라이브러리에서 중요한 역할을합니다. 간단하지만 효율적인 색상 일치 알고리즘을 사용하여 색상으로 제한된 환경에서도 색상의 가장 좋은 근사를 찾을 수 있습니다.
그것이 어떻게 작동하는지 이해하면 이미지 처리 프로그램을 더 잘 최적화하고 시스템 성능을 향상시키는 데 도움이됩니다.