PHP imagesetstyle() 함수란?
imagesetstyle()은 PHP의 GD 라이브러리에 내장된 함수로, 선을 그릴 때 사용할 스타일(픽셀 색상 패턴)을 설정하는 역할을 합니다. 이 함수는 점선, 대시 패턴 등 다양한 선 스타일을 만들 수 있게 해주며, imageline(), imagepolygon() 같은 모든 선 그리기 함수와 함께 사용할 수 있습니다.
문법(Syntax)
bool imagesetstyle(resource $image, array $style)
매개변수
imagesetstyle() 함수는 두 개의 매개변수를 받습니다.
$image – 작업 대상이 되는 이미지 리소스입니다. imagecreatetruecolor()나 imagecreatefrompng() 등으로 생성한 이미지를 지정합니다.
$style – 선을 구성할 픽셀 색상들의 배열입니다. 배열에 담긴 색상 순서대로 픽셀이 반복되어 그려지므로, 이 순서를 조합하면 원하는 무늬의 선을 만들 수 있습니다.
반환 값
스타일 설정이 성공하면 true를, 실패하면 false를 반환합니다.
예제 1: 빨간색 점선과 브러시 선 그리기
아래 예제에서는 5픽셀의 빨간색과 5픽셀의 흰색이 번갈아 나타나는 점선을 그리고, imagesetbrush()와 함께 사용해 웃는 얼굴 이미지가 반복되는 브러시 선도 그려봅니다.
<?php
header("Content-type: image/jpeg");
$img = imagecreatetruecolor(700, 300);
$w = imagecolorallocate($img, 122, 122, 122);
$red = imagecolorallocate($img, 255, 0, 0);
/* 빨간색 5픽셀 + 흰색 5픽셀로 구성된 점선 그리기 */
$style = array($red, $red, $red, $red, $red, $w, $w, $w, $w, $w);
imagesetstyle($img, $style);
imageline($img, 0, 0, 200, 200, IMG_COLOR_STYLED);
/* imagesetbrush()와 imagesetstyle()을 함께 사용해
웃는 얼굴 이미지로 이루어진 선 그리기 */
$style = array($w, $w, $w, $w, $w, $w, $w, $w, $w, $w, $w, $w, $red);
imagesetstyle($img, $style);
$brush = imagecreatefrompng('C:\xampp\htdocs\Images\img34.png');
$w2 = imagecolorallocate($brush, 255, 255, 255);
imagecolortransparent($brush, $w2);
imagesetbrush($img, $brush);
imageline($img, 200, 0, 0, 200, IMG_COLOR_STYLEDBRUSHED);
imagejpeg($img);
imagedestroy($img);
?>실행 결과
위 코드를 실행하면 캔버스 위에 빨간색 점선 하나와 웃는 얼굴 아이콘이 연달아 찍히는 브러시 선 하나가 출력됩니다.
예제 2: 파란색·녹색 점선 그리기
PNG 이미지를 불러온 후, 파란색 5픽셀과 녹색 5픽셀로 구성된 점선을 그리는 예제입니다.
<?php
// imagecreatefrompng() 함수로 PNG 이미지 불러오기
$img = imagecreatefrompng('C:\xampp\htdocs\Images\img34.png');
// 파란색과 녹색 색상 할당
$blue = imagecolorallocate($img, 0, 0, 255);
$green = imagecolorallocate($img, 0, 255, 0);
// 파란색 5픽셀 + 녹색 5픽셀 점선 그리기
$style = array($blue, $blue, $blue, $blue, $blue,
$green, $green, $green, $green, $green);
imagesetstyle($img, $style);
imageline($img, 0, 100, 800, 100, IMG_COLOR_STYLED);
// 브라우저에 이미지 출력
header('Content-type: image/png');
imagepng($img);
?>실행 결과
코드 실행 시 이미지 가운데에 파란색과 녹색이 번갈아 나타나는 수평 점선이 그려진 것을 확인할 수 있습니다.
정리 및 핵심 포인트
IMG_COLOR_STYLED 상수를 imageline()의 색상 인자로 전달해야 설정한 스타일이 적용됩니다.
$style 배열의 길이는 자유롭게 조절할 수 있으며, 배열 순서가 곧 선의 무늬 패턴이 됩니다.
imagesetbrush()와 함께 사용하면 일반 색상 대신 이미지(브러시)를 선으로 표현할 수 있으며, 이때는 IMG_COLOR_STYLEDBRUSHED 상수를 사용합니다.
사용이 끝난 이미지 리소스는 imagedestroy()로 해제해 주는 것이 메모리 관리에 좋습니다.