Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP imagepalettecopy() 함수로 이미지 간 팔레트 복사하기 – 사용법과 예제 총정리

imagepalettecopy()는 PHP에 내장된 GD 라이브러리 함수로, 한 이미지의 팔레트(palette)를 다른 이미지로 복사할 때 사용합니다. 소스(source) 이미지의 색상 팔레트 전체를 대상(destination) 이미지에 그대로 옮겨주기 때문에, 동일한 색상 팔레트를 공유해야 하는 여러 이미지를 다룰 때 매우 유용합니다.

문법(Syntax)

void imagepalettecopy(resource $destination, resource $source)

매개변수(Parameters)

imagepalettecopy() 함수는 두 개의 매개변수를 받습니다.

  • $destination – 팔레트를 복사받을 대상 이미지 리소스입니다.

  • $source – 팔레트를 가져올 원본(소스) 이미지 리소스입니다.

반환 값(Return Values)

이 함수는 어떤 값도 반환하지 않습니다(void). 팔레트 복사 작업만 수행하고 종료됩니다.

예제 1 – 팔레트 복사 후 사각형 그리기

아래 예제에서는 imagecreate() 함수로 두 개의 팔레트 이미지를 생성한 뒤, 첫 번째 이미지에 할당한 회색을 두 번째 이미지에서 그대로 사용하는 방법을 보여줍니다.

<?php
    // imagecreate() 함수로 두 개의 팔레트 이미지를 생성합니다.
    $palette1 = imagecreate(700, 300);
    $palette2 = imagecreate(700, 300);
    
    // 첫 번째 팔레트 이미지에
    // 회색 배경색을 할당합니다.
    $gray = imagecolorallocate($palette1, 122, 122, 122);

    // 첫 번째 이미지의 팔레트를 두 번째 이미지로 복사합니다.
    imagepalettecopy($palette2, $palette1);

    // imagecolorallocate()를 다시 호출하지 않고도
    // 회색을 그대로 사용할 수 있습니다.
    imagefilledrectangle($palette2, 0, 0, 99, 99, $gray);

    // 브라우저에 이미지를 출력합니다.
    header('Content-type: image/png');
    imagepng($palette2);
    imagedestroy($palette1);
    imagedestroy($palette2);
?>

출력 결과

위 코드를 실행하면 두 번째 이미지에 회색 사각형이 그려진 PNG 이미지가 출력됩니다. 핵심은 $gray 색상이 $palette1에만 할당되었음에도, 팔레트가 복사되었기 때문에 $palette2에서도 동일하게 사용 가능하다는 점입니다.

예제 2 – 복사된 팔레트의 색상 수 확인

다음 예제는 imagecolorstotal() 함수를 이용해 팔레트 복사 전후의 색상 수를 비교합니다.

<?php
    // imagecreate() 함수로 두 개의 팔레트 이미지를 생성합니다.
    $palette1 = imagecreate(500, 200);
    $palette2 = imagecreate(500, 200);

    // 초록색을 생성합니다.
    $green = imagecolorallocate($palette1, 0, 255, 0);

    // 초록색을 첫 번째 팔레트의 배경으로 지정합니다.
    imagefilledrectangle($palette1, 0, 0, 99, 99, $green);

    // 첫 번째 이미지의 팔레트를 두 번째 이미지로 복사합니다.
    imagepalettecopy($palette2, $palette1);

    // 각 이미지에 포함된 색상 수를 구합니다.
    $color1 = imagecolorstotal($palette1);
    $color2 = imagecolorstotal($palette2);
    
    echo "첫 번째 이미지의 색상 수: " . $color1 . "<br>";
    echo "두 번째 이미지의 색상 수: " . $color2;
?>

출력 결과

첫 번째 이미지의 색상 수: 1
두 번째 이미지의 색상 수: 1

정리

imagepalettecopy()를 활용하면 imagecolorallocate()를 반복해서 호출할 필요 없이, 하나의 이미지에 정의된 색상 팔레트를 다른 이미지에 손쉽게 재사용할 수 있습니다. 특히 GIF처럼 팔레트 기반 색상 체계를 사용하는 이미지 형식을 다룰 때 코드를 간결하게 유지하고 메모리 사용을 줄이는 데 효과적입니다.