이미지 처리 및 GD imagefilter
(PHP 5, PHP 7, PHP 8)
imagefilter — 이미지에 필터를 적용합니다.
설명
imagefilter(GdImage $image
, int $filter
, array|int|float|bool ...$args
): bool
imagefilter()는 image
에 주어진 필터 filter
를 적용합니다.
매개변수
image
- imagecreatetruecolor()와 같은 이미지 생성 함수 중 하나에서 반환되는 GdImage 객체.
filter
filter
는 다음 중 하나일 수 있습니다.-
IMG_FILTER_NEGATE
: 이미지의 모든 색상을 반전시킵니다. -
IMG_FILTER_GRAYSCALE
: REC.601 휘도(Y') 계산과 동일한 계수를 사용하여 빨강, 녹색 및 파랑 구성 요소를 가중치 합으로 변경하여 이미지를 회색조로 변환합니다. 알파 구성 요소는 유지됩니다. 팔레트 이미지의 경우 팔레트 제한으로 인해 결과가 다를 수 있습니다. -
IMG_FILTER_BRIGHTNESS
: 이미지의 밝기를 변경합니다.args
를 사용하여 밝기 수준을 설정합니다. 밝기 범위는 -255 ~ 255입니다. -
IMG_FILTER_CONTRAST
: 이미지의 대비를 변경합니다.args
를 사용하여 대비 수준을 설정합니다. -
IMG_FILTER_COLORIZE
: 색상을 지정할 수 있다는 점을 제외하면IMG_FILTER_GRAYSCALE
과 같습니다.alpha
채널에 대해red
,green
,blue
및args4
형태의args
,args2
및args3
을 사용합니다. 각 색상의 범위는 0~255입니다. -
IMG_FILTER_EDGEDETECT
: 가장자리 감지를 사용하여 이미지의 가장자리를 강조 표시합니다. -
IMG_FILTER_EMBOSS
: 이미지를 양각합니다. -
IMG_FILTER_GAUSSIAN_BLUR
: 가우스 메서드를 사용하여 이미지를 흐리게 합니다. -
IMG_FILTER_SELECTIVE_BLUR
: 이미지를 흐리게 합니다. -
IMG_FILTER_MEAN_REMOVAL
: "sketchy" 효과를 얻기 위해 평균 제거를 사용합니다. -
IMG_FILTER_SMOOTH
: 이미지를 더 부드럽게 만듭니다.args
를 사용하여 부드러움 수준을 설정합니다. -
IMG_FILTER_PIXELATE
: 이미지에 픽셀화 효과를 적용하고args
를 사용하여 블록 크기를 설정하고args2
를 사용하여 픽셀화 효과 모드를 설정합니다. -
IMG_FILTER_SCATTER
: 이미지에 분산 효과를 적용하고args
및args2
를 사용하여 효과 강도를 정의하고 추가로args3
을 사용하여 선택한 픽셀 색상에만 적용합니다.
-
args
-
-
IMG_FILTER_BRIGHTNESS
: 밝기 수준. -
IMG_FILTER_CONTRAST
: 대비 수준. -
IMG_FILTER_COLORIZE
: 빨간색 구성 요소의 값입니다. -
IMG_FILTER_SMOOTH
: 부드러움 수준. -
IMG_FILTER_PIXELATE
: 블록 크기(픽셀). -
IMG_FILTER_SCATTER
: 효과 빼기 수준. 이것은arg2
로 설정된 덧셈 레벨보다 높거나 같아서는 안 됩니다.
-
arg2
-
-
IMG_FILTER_COLORIZE
: 녹색 구성 요소의 가치. -
IMG_FILTER_PIXELATE
: 고급 픽셀화 효과를 사용할지 여부(기본값은false
)입니다. -
IMG_FILTER_SCATTER
: 효과 추가 레벨.
-
arg3
-
-
IMG_FILTER_COLORIZE
: 파란색 구성 요소의 값입니다. -
IMG_FILTER_SCATTER
: 효과를 적용할 선택적 배열 인덱스 색상 값입니다.
-
arg4
-
-
IMG_FILTER_COLORIZE
: 알파 채널, 0과 127 사이의 값. 0은 완전히 불투명한 것을 나타내고 127은 완전히 투명함을 나타냅니다.
-
반환 값
성공하면 true
를, 실패하면 false
를 반환합니다.
변경 로그
버전 | 설명 |
---|---|
8.0.0 | image 는 이제 GdImage 인스턴스를 예상합니다. 이전에는 리소스가 필요했습니다. |
7.4.0 | 분산 지원 (IMG_FILTER_SCATTER )이 추가되었습니다. |
Examples
예제 #1 imagefilter() grayscale 예
<?php
$im = imagecreatefrompng('dave.png');
if($im && imagefilter($im, IMG_FILTER_GRAYSCALE))
{
echo 'Image converted to grayscale.';
imagepng($im, 'dave.png');
}
else
{
echo 'Conversion to grayscale failed.';
}
imagedestroy($im);
?>
예제 #2 imagefilter() brightness 예
<?php
$im = imagecreatefrompng('sean.png');
if($im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20))
{
echo 'Image brightness changed.';
imagepng($im, 'sean.png');
imagedestroy($im);
}
else
{
echo 'Image brightness change failed.';
}
?>
예제 #3 imagefilter() colorize 예
<?php
$im = imagecreatefrompng('philip.png');
/* R, G, B, so 0, 255, 0 is green */
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0))
{
echo 'Image successfully shaded green.';
imagepng($im, 'philip.png');
imagedestroy($im);
}
else
{
echo 'Green shading failed.';
}
?>
예제 #4 imagefilter() negate 예
<?php
// Define our negate function so its portable for
// php versions without imagefilter()
function negate($im)
{
if(function_exists('imagefilter'))
{
return imagefilter($im, IMG_FILTER_NEGATE);
}
for($x = 0; $x < imagesx($im); ++$x)
{
for($y = 0; $y < imagesy($im); ++$y)
{
$index = imagecolorat($im, $x, $y);
$rgb = imagecolorsforindex($index);
$color = imagecolorallocate($im, 255 - $rgb['red'], 255 - $rgb['green'], 255 - $rgb['blue']);
imagesetpixel($im, $x, $y, $color);
}
}
return(true);
}
$im = imagecreatefromjpeg('kalle.jpg');
if($im && negate($im))
{
echo 'Image successfully converted to negative colors.';
imagejpeg($im, 'kalle.jpg', 100);
imagedestroy($im);
}
else
{
echo 'Converting to negative colors failed.';
}
?>
예제 #5 imagefilter() pixelate 예
<?php
// Load the PHP logo, we need to create two instances
// to show the differences
$logo1 = imagecreatefrompng('./php.png');
$logo2 = imagecreatefrompng('./php.png');
// Create the image instance we want to show the
// differences on
$output = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));
// Apply pixelation to each instance, with a block
// size of 3
imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);
// Merge the differences onto the output image
imagecopy($output, $logo1, 0, 0, 0, 0, imagesx($logo1) - 1, imagesy($logo1) - 1);
imagecopy($output, $logo2, imagesx($logo2), 0, 0, 0, imagesx($logo2) - 1, imagesy($logo2) - 1);
imagedestroy($logo1);
imagedestroy($logo2);
// Output the differences
header('Content-Type: image/png');
imagepng($output);
imagedestroy($output);
?>
위의 예는 다음과 유사한 결과를 출력합니다.
예제 #6 imagefilter() scatter 예
<?php
// Load the image
$logo = imagecreatefrompng('./php.png');
// Apply a very soft scatter effect to the image
imagefilter($logo, IMG_FILTER_SCATTER, 3, 5);
// Output the image with the scatter effect
header('Content-Type: image/png');
imagepng($logo);
imagedestroy($logo);
?>
위의 예는 다음과 유사한 결과를 출력합니다.
메모
메모: IMG_FILTER_SCATTER
의 결과는 항상 무작위입니다.
기타
- imageconvolution() - 계수 및 오프셋을 사용하여 3x3 합성곱 행렬 적용