imageconvolution()은 PHP의 내장 함수로, 이미지에 3×3 컨볼루션(convolution, 회선) 행렬을 계수와 오프셋 값과 함께 적용할 때 사용됩니다. 이 함수를 활용하면 이미지 선명화(sharpening), 가우시안 블러(Gaussian blur), 엠보싱 등 다양한 이미지 필터 효과를 손쉽게 구현할 수 있습니다.
문법(Syntax)
bool imageconvolution($image, $matrix, $div, $offset)
매개변수(Parameters)
imageconvolution() 함수는 총 네 개의 매개변수인 $image, $matrix, $div, $offset을 받습니다.
$image − 컨볼루션을 적용할 대상 이미지입니다. imagecreatetruecolor()와 같은 이미지 생성 함수를 통해 만든 이미지 리소스를 전달합니다.
$matrix − 적용할 3×3 크기의 실수(float) 배열 형태의 컨볼루션 행렬입니다.
$div − 행렬 연산 결과를 정규화(normalization)하기 위한 나눗셈 계수입니다.
$offset − 최종 픽셀 색상에 더해지는 색상 오프셋 값입니다.
반환 값(Return Values)
imageconvolution() 함수는 성공 시 true를, 실패 시 false를 반환합니다.
예제 1: 이미지 선명화 효과
<?php
// imagecreatefrompng() 함수로 PNG 이미지를 불러옵니다.
$image = imagecreatefrompng('C:\xampp\htdocs\Images\img59.png');
// 3×3 배열 형태의 컨볼루션 행렬을 정의합니다.
$matrix = array(
array(2, 0, 0),
array(0, -1, 0),
array(0, 0, -1)
);
// imageconvolution() 함수로 이미지 요소를 변형합니다.
imageconvolution($image, $matrix, 1, 127);
// 처리된 결과 이미지를 브라우저에 출력합니다.
header('Content-Type: image/png');
imagepng($image, null, 9);
?>
출력 결과
imageconvolution() 함수 적용 전의 원본 PNG 이미지

imageconvolution() 함수 적용 후의 결과 PNG 이미지

예제 2: 가우시안 블러 효과
<?php
$image = imagecreatetruecolor(700, 300);
// 텍스트를 작성한 뒤 이미지에 가우시안 블러를 적용합니다.
imagestring($image, 50, 25, 8, 'Gaussian Blur Text image', 0x00ff00);
$gaussian = array(
array(1.0, 2.0, 1.0),
array(2.0, 4.0, 2.0),
array(1.0, 2.0, 1.0)
);
imageconvolution($image, $gaussian, 16, 0);
// 비교를 위해 블러가 적용되지 않은 텍스트를 다시 작성합니다.
imagestring($image, 15, 20, 18, 'Gaussian Blur Text image', 0x00ff00);
header('Content-Type: image/png');
imagepng($image, null, 9);
?>
출력 결과

위 예제에서 볼 수 있듯이, 가우시안 행렬의 각 요소 합이 16이므로 $div 값을 16으로 지정하면 이미지의 전체 밝기가 유지된 상태로 부드러운 블러 효과를 얻을 수 있습니다. 반면 $div 값이 행렬 요소의 합과 일치하지 않으면 이미지가 밝아지거나 어두워질 수 있으므로 주의해야 합니다.