PHP: Convertir png y gif en escala de grises

Estoy usando el siguiente script para convertir jpgs en imágenes en escala de grises.http://bubble.ro/How_to_convert_an_image_to_grayscale_using_PHP.html

Quiero actualizarlo para convertir pngs (con transparencia) y gifs (con transparencia) en imágenes en escala de grises.

Por el momento no está funcionando. Estoy consultando la imagen-src para su extensión de archivo. Si jpg, if, gif, o si png, llamo a imagecreatefrom-jpg-gif-png apropiado

Sin embargo, siempre estoy ejecutando el mismo for-loop y, por desgracia, los gifs solo obtienen rectángulos grises, cada píxel es gris. El trabajo de Png casi funciona, sin embargo, la transparencia en pngs se transforma en negro.

¿Algunas ideas?