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처럼 팔레트 기반 색상 체계를 사용하는 이미지 형식을 다룰 때 코드를 간결하게 유지하고 메모리 사용을 줄이는 데 효과적입니다.