3 Stimmen

Konvertiere das hochgeladene Bild in Graustufen in PHP

Ich habe ein Skript, das ein Bild hochlädt und verkleinert, was alles gut funktioniert, aber ich wollte in der Lage sein, die Farbe aus dem Bild zu entfernen und es schwarzweiß zu machen (verschiedene Grautöne im Wesentlichen). Ich war mir nicht sicher, wie ich das erreichen soll?

Danke

11voto

Yuri Punkte 1958

Versuchen Sie etwas in dieser Art:

> 16) & 0xFF;
                $gg = ($rgb >> 8) & 0xFF;
                $bb = $rgb & 0xFF;

                // den Wert aus dem RGB-Wert erhalten

                $g = round(($rr + $gg + $bb) / 3);

                // Graustufenwerte haben r=g=b=g

                $val = imagecolorallocate($im, $g, $g, $g);

                // den Grauwert festlegen

                imagesetpixel ($im, $i, $j, $val);
        }
}

header('Content-type: image/jpeg');
imagejpeg($im);
?>

Beachten Sie, dass ich dieses Snippet schamlos von diesem Artikel abgerissen habe, den ich mit einer Google-Suche mit den Begriffen gefunden habe: php convert image to grayscale

[ bearbeiten ] Und aus den Kommentaren, wenn Sie PHP5 verwenden, könnten Sie auch verwenden:

imagefilter($im, IMG_FILTER_GRAYSCALE);

2voto

Jan Franc Punkte 21

Die einfachste Lösung besteht darin, imagefilter($im, IMG_FILTER_GRAYSCALE); zu verwenden. Aber jede einzelne hier erwähnte Methode funktioniert nicht zu 100%. Sie alle basieren auf der Farbpalette des Bildes, aber die Graustufen könnten fehlen und eine andere Farbe aus der Palette wird verwendet.

Meine Lösung ist, Farben in der Farbpalette mit imagecolorset zu ersetzen.

$colorsCount = imagecolorstotal($img->getImageResource());
for($i=0;$i<$colorsCount;$i++){
    $colors = imagecolorsforindex( $img->getImageResource() , $i );
    $g = round(($colors['red'] + $colors['green'] + $colors['blue']) / 3);
    imagecolorset($img->getImageResource(), $i, $g, $g, $g);
}

1voto

vijay Punkte 721

Es ist besser, das Befehls-Tool zu verwenden, um solche Art von Bild zu konvertieren.

Während animierte GIFs auch unterstützt werden.

Zum Beispiel:

$file = 'image.jpg';
$file = 'image.gif';
$file = 'image.png';
$image_type = getimagesize($file);

switch (strtolower($image_type['mime'])) {
    case 'image/png':
       exec("convert $file -colorspace Gray dummy.png");
        break;
    case 'image/jpeg':
       exec("convert $file -colorspace Gray dummy.jpeg");
        break;
    case 'image/gif':
       exec("convert $file -colorspace Gray dummy.gif");
        break;
    default:
        die;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X