이미지 처리 및 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, blueargs4 형태의 args, args2args3을 사용합니다. 각 색상의 범위는 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: 이미지에 분산 효과를 적용하고 argsargs2를 사용하여 효과 강도를 정의하고 추가로 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);
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

function imagefilter

예제 #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);
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

function imagefilter


메모

메모: IMG_FILTER_SCATTER의 결과는 항상 무작위입니다.


기타