Конвертация изображения из цветного в черно-белый

avenger_msoft

Новичок
Olsufr
Попробуй апроксимировать так:

PHP:
        $im = $image["fonction_imagecreatefrom"]($im);
        $im_ = imagecreatetruecolor($x_i, $y_i);
        @imagealphablending($im_, false);
        @imagesavealpha($im_,true);
        $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 );
        imagefill ($im_, 0, 0, $color_t);
 
        for ($x = 0; $x < $x_i; $x++) {
            for ($y=0; $y < $y_i; $y++) {
            
                $rgb = ImageColorAt($im, $x, $y);
                $a = ($rgb >> 24) & 0xFF;
                
                $dif = false;
                $m = 0;
                $t = 0;
                for ($ix = -1*$trait/2; $ix <= $trait/2; $ix++) {
                    for ($iy = -1*$trait/2; $iy <= $trait/2; $iy++) {
                        $x2 = $x + $ix;
                        $y2 = $y + $iy;
                        if ($x2 >=0 AND $y2 >= 0 AND $x2 < $x_i AND $y2  < $y_i) {
                        $t++;
                            $rgb2 = ImageColorAt($im, $x2, $y2);
                            $a2 = ($rgb2 >> 24) & 0xFF;
                            $r2 = ($rgb2 >> 16) & 0xFF;
                            $g2 = ($rgb2 >> 8) & 0xFF;
                            $b2 = $rgb2 & 0xFF;
    
                            if ($a != $a2) {
                                $dx = min(abs($ix),abs($iy));
                                $dy = max(abs($ix),abs($iy));
                                if ($mem[$dx][$dy]) $d = $mem[$dx][$dy];
                                else {
                                    $mem[$dx][$dy] = sqrt(($dx)*($dx)+($dy)*($dy));
                                    $d = $mem[$dx][$dy];
                                }
                                if ($d>0) {
                                    $m = $m + (abs($a2-$a) / $d);
                                } else {
                                    $m = $m + 127;
                                }
                            }
                        }
                    }
                }
                $m = 127 - (($m / $t) * $trait);
                $m = min(max($m, 0), 127);
                                        
                $color = ImageColorAllocateAlpha( $im_, $dr, $dv, $db , round($m) );
                imagesetpixel ($im_, $x, $y, $color);      
            }
        }
 
Сверху