PHP: Umwandlung von PNGs und GIFs in Graustufen

Ich verwende das folgende Skript, um JPGs in Graustufenbilder zu konvertieren.http://bubble.ro/How_to_convert_an_image_to_grayscale_using_PHP.html

Ich möchte es aktualisieren, um auch PNGs (mit Transparenz) und GIFs (mit Transparenz) in Graustufenbilder zu konvertieren.

Im Moment funktioniert es nicht. Ich frage den Bild-Quellcode nach seiner Dateierweiterung ab. Wenn jpg, if, gif oder png, dann rufe ich das entsprechende imagecreatefrom-jpg-gif-png auf

Allerdings laufe ich immer die gleiche for-Schleife und gifs bekommen leider nur graue Rechtecke, jedes Pixel ist grau. Png ist fast fertig, aber die Transparenz in PNGs verwandelt sich in Schwarz.

Irgendwelche Ideen?