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?
: 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.
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);
}