Nasıl bir görüntü PHP siyah ve beyaz dönüştürebilirim

7 Cevap php

Nasıl bir PHP siyah ve beyaz bir görüntü dönüştürme hakkında gidiyor?

Sadece gri tonlama çevirerek ama her pikselin siyah veya beyaz yapılmış değil mi?

7 Cevap

Sadece siyah ya da beyaz için gri tonlama renk yuvarlak.

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

: Php gd kütüphane kullanma

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

Daha fazla örnek için yukarıdaki bağlantıyı kullanıcı yorumları kontrol edin.

Eğer ev destekliyorsa varsayarak, imagemagic'den dışarı kabuk olabilir. Bir pikselin siyah veya beyaz olmalıdır eğer karar için kullanmak ne fonksiyon istiyorsun?

Bunu kendiniz yapmak istiyorsanız, bir dithering algorithm uygulamak gerekir. Ama @jonni varolan araç çok daha kolay olacağını kullanırken, dediği gibi?

For each pixel you must convert from color to greyscale - something like $grey = $red * 0.299 + $green * 0.587 + $blue * 0.114; (these are NTSC weighting factors; other similar weightings exist. This mimics the eye's varying responsiveness to different colors).

Sonra bir cut-off değerine karar vermeniz gerekir - genellikle yarım maksimum piksel değeri, ama görüntüye göre size (koyu yapmak) veya düşük (görüntü daha parlak yapmak) daha yüksek bir değeri tercih edebilir.

Sadece kesme her pikseli karşılaştıran ayrıntılı bir sürü kaybeder - yani büyük koyu alanlar tamamen siyah gitmek - böylece daha fazla bilgi saklamak için, sen Titrek. Temel olarak, resmin sol üst başlar: her bir piksel için cut-off değerine karşılaştırarak önce sola ve üzeri pikseller için hata (özgün değeri ve son atanan değeri arasındaki fark) ekleyin.

PHP bunu çok yavaş olacağını unutmayın - Bunu sağlayan bir kütüphaneyi bulmak için çok daha önde olacaktır.

Bu fonksiyon, bir cazibe gibi çalışır

    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);

}

Php gd kütüphanesi kullanarak:

imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, 1000);