3 Stimmen

Konvertiere hochgeladenes Bild in Graustufen in PHP

Ich habe ein Skript, das ein Bild hochlädt und es verkleinert, was alles gut funktioniert, aber ich wollte die Farbe aus dem Bild entfernen und es schwarz-weiß lassen (verschiedene Grautöne im Wesentlichen). Ich war mir nicht sicher, wie ich das erreichen kann?

Vielen Dank

11voto

Yuri Punkte 1958

Versuchen Sie etwas in dieser Art:

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

                // Holen Sie den Wert aus dem RGB-Wert

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

                // Graustufenwerte haben r=g=b=g

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

                // Setzen Sie den Grauwert

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

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

Beachten Sie, dass ich dieses Snippet schamlos aus diesem Artikel kopiert habe, den ich mit den Suchbegriffen: php Bild in Graustufen umwandeln über eine Google-Suche gefunden habe.

[ bearbeiten ] Und aus den Kommentaren, wenn Sie PHP5 verwenden, können Sie auch folgendes 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 hier erwähnte Methode funktioniert nicht zu 100%. Alle setzen auf die Farbpalette des Bildes, aber die Grautöne könnten fehlen und eine andere Farbe aus der Palette wird verwendet.

Meine Lösung besteht darin, die 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 Befehlsprogramm 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