문제

PHP에서 이미지를 흑백으로 변환하는 방법은 무엇입니까?

그것을 그리스 스케일로 바꾸는 것뿐만 아니라 모든 픽셀이 검은 색이나 흰색으로 만들었습니까?

도움이 되었습니까?

해결책

그레이 스케일 색상을 검은 색 또는 흰색으로 둥글게합니다.

float gray = (r + g + b) / 3
if(gray > 0x7F) return 0xFF;
return 0x00;

다른 팁

PHP 사용 GD 도서관:

imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, -100);

더 많은 예제는 위의 링크에서 사용자 주석을 확인하십시오.

호스트가 지원한다고 가정하면 imagemagick로 껍질을 벗길 수 있습니다. 픽셀이 검은 색이든 흰색인지 결정하기 위해 어떤 기능을 사용하고 싶습니까?

이 작업을 직접하려면 디더링 알고리즘. 그러나 ~함에 따라 @jonni 기존 도구를 사용하는 것이 훨씬 쉬울까요?

$rgb = imagecolorat($original, $x, $y);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8 ) & 0xFF;
        $b = $rgb & 0xFF;

        $gray = $r + $g + $b/3;
        if ($gray >0xFF) {$grey = 0xFFFFFF;}
        else { $grey=0x000000;}

이 기능은 매력처럼 작동합니다

    public function ImageToBlackAndWhite($im) {

    for ($x = imagesx($im); $x--;) {
        for ($y = imagesy($im); $y--;) {
            $rgb = imagecolorat($im, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8 ) & 0xFF;
            $b = $rgb & 0xFF;
            $gray = ($r + $g + $b) / 3;
            if ($gray < 0xFF) {

                imagesetpixel($im, $x, $y, 0xFFFFFF);
            }else
                imagesetpixel($im, $x, $y, 0x000000);
        }
    }

    imagefilter($im, IMG_FILTER_NEGATE);

}

각 픽셀에 대해 색상에서 Greyscale으로 변환해야합니다 - $ Grey = $ red * 0.299 + $ green * 0.587 + $ blue * 0.114; (이것은 NTSC 가중치이며, 다른 유사한 가중치가 존재합니다. 이것은 다른 색상에 대한 눈의 다양한 반응성을 모방합니다).

그런 다음 컷오프 값 (일반적으로 최대 픽셀 값의 절반 절반)을 결정해야하지만 이미지에 따라 더 높은 값 (이미지를 더 어둡게 함)을 선호 할 수 있습니다 (이미지를 더 밝게 만드십시오).

각 픽셀을 컷오프와 비교하면 많은 세부 사항이 손실됩니다. 즉, 큰 어두운 영역은 완전히 검은 색으로 이동하므로 더 많은 정보를 유지하려면 디더링 할 수 있습니다. 기본적으로 이미지의 왼쪽 상단에서 시작하십시오. 각 픽셀에 대해 컷오프 값과 비교하기 전에 픽셀의 오류 (원래 값과 최종 지정된 값의 차이)를 추가하십시오.

PHP 에서이 작업을 수행하는 것은 매우 느리게 될 것입니다.이를 제공하는 라이브러리를 찾기 위해 훨씬 앞서있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top