현재 위치: > 최신 기사 목록> GD 이미지의 색상 팔레트와 imageColorResolve () 사이의 기본 상호 작용

GD 이미지의 색상 팔레트와 imageColorResolve () 사이의 기본 상호 작용

M66 2025-06-04

imageColorResolve () 는 PHP의 GD 라이브러리를 사용하여 이미지를 처리 ​​할 때 매우 일반적인 기능입니다. 그 목적은 이미지 팔레트에서 지정된 색상에 가장 가까운 색상 색인을 찾거나 발견되지 않은 경우 새 색상을 추가하는 것입니다. 이것은 작은 아이콘 생성, 검증 코드 사진 등과 같은 제한된 색상 팔레트에서 색상을 동적으로 관리 해야하는 장면에 매우 유용합니다.

그렇다면 imageColorResolve ()는 어떻게 바닥의 이미지 팔레트와 상호 작용합니까? 여기에서 깊이 논의 해 봅시다.

1. 색상 팔레트 기본 사항

GD에서는 Palette Image (일반적으로 imageCreatetRueColor () 대신 imageCreate () 로 생성)를 작성하면 이미지가 색상 테이블을 내부에 유지합니다. 이 컬러 테이블은 최대 256 개의 색상을 포함 할 수있는 배열입니다.

각 색상은 테이블에 인덱스가 있으며 일반적으로 다음과 같은 RGB 구조에 저장됩니다.

 $img = imagecreate(100, 100);
$red = imagecolorallocate($img, 255, 0, 0); // 색인 0
$green = imagecolorallocate($img, 0, 255, 0); // 색인 1
$blue = imagecolorallocate($img, 0, 0, 255); // 색인 2

팔레트가 가득 차면 (256 색) 기존 색상을 재사용해야합니다. 이는 imagecolorresolve ()가 과시 할 때입니다.

2. imageColorResolve () 프로세스의 개요

imageColorResolve ($ image, $ r, $ g, $ b)를 호출하면 기본 레이어는 실제로 다음 단계를 거칩니다.

  1. 기존 색상 팔레트 <br>을 스캔하십시오 팔레트의 각 색상을 반복하고 그 팔레트와 대상 색상 사이의 "거리"를 계산하십시오 (일반적으로 RGB 공간의 유클리드 거리, 즉 : : 예 :.
    ( r 1 ? r 2 ) 2 + ( g 1 ? g 2 ) 2 + ( b 1 ? b 2 ) 2 (r1 - r2)^2 + (g1 - g2)^2 + (b1 - b2)^2 ).

  2. 가장 가까운 색상을 찾으십시오 <br> 스캐닝 과정에서 현재 발견 된 최소 거리와 해당 색상 지수는 항상 기록됩니다.

  3. 반환 또는 색상을 추가하십시오

    • 정확히 일치하는 색상이 발견되면 (즉, 거리가 0이면) 해당 인덱스가 직접 반환됩니다.

    • 정확히 일치하지 않지만 팔레트가 256 색 미만인 경우이 새로운 색상을 팔레트에 추가하고 새 색상의 색인을 반환하십시오.

    • 팔레트가 가득 차면 색상에 가장 가까운 인덱스 만 반환됩니다.

이를 통해 팔레트의 제한을 깨지 않고 팔레트 이미지의 지정된 색상을 최대한 일치 시키거나 대략적으로 일치시킬 수 있습니다.

3. 실제 코드 예제

다른 데이터에 따라 채색 해야하는 동적으로 생성 된 작은 아이콘이 있다고 가정 해 봅시다. 다음과 같이 사용할 수 있습니다.

 <?php
// a 100x100 팔레트 이미지
$image = imagecreate(100, 100);

// 정의베이스 흰색 배경
$background = imagecolorallocate($image, 255, 255, 255);

// 특별한 색상으로 채우고 싶습니다
$desired_r = 120;
$desired_g = 180;
$desired_b = 90;

// 가장 가까운 색상을 찾거나 새 색상을 추가하십시오
$color = imagecolorresolve($image, $desired_r, $desired_g, $desired_b);

// 발견 된 색상으로 영역을 채우십시오
imagefilledrectangle($image, 10, 10, 90, 90, $color);

// 출력 사진
header('Content-Type: image/png');
imagepng($image);

// 리소스를 자유롭게합니다
imagedestroy($image);
?>

위의 이미지를 생성하기 위해 URL을 제공하려면 예제 URL은 다음과 같습니다.

 https://m66.net/generate_icon.php

여기서 generate_icon.php는 가정 된 처리 스크립트입니다.

4. 보충 : 팔레트 이미지와 진정한 색상 이미지의 차이

ImageColorResolve ()팔레트 이미지 에만 사용할 수 있습니다. imageCreatetRueColor () (즉, 진정한 색상 이미지 )로 이미지를 작성하는 경우 GD 라이브러리는 색상 팔레트를 사용하지 않으며 색상은 픽셀로 직접 저장됩니다. 이 경우 인덱스를 찾는 대신 RGB 값을 직접 사용해야합니다.

True Color 이미지에서 imageColorResolve ()를 사용하려면 PHP는 일반적으로 내부적으로 팔레트 맵을 생성하므로 비효율적이므로 권장되지 않습니다.

5. 요약

  • ImageColorResolve ()는 유한 팔레트 이미지 에서 지정된 색상에 가장 가까운 인덱스를 찾는 것입니다.

  • 하단 레이어는 팔레트를 스캔하여 색상 차이를 계산하고 정확한 일치를 찾는 우선 순위를 정합니다. 그렇지 않으면 가장 가까운 곳이 있습니다.

  • 색상 팔레트는 최대 256 개의 색상을 가지며 초과 한 후에 만 ​​근사화 할 수 있습니다.

  • 이 방법은 실제 색상 이미지 ( imageCreatetRueColor ()를 사용하여 생성)에는 적용되지 않습니다.

이것을 이해하면 PHP에서 이미지를 동적으로 생성 할 때보다 효율적이고 정확한 제어를 얻을 수 있습니다!