Jeg prøvede lige at rette desc's løsning til, så den acceptere png, jpeg, jpg og gif.
<?php
//http://www.eksperten.dk/spm/763355
function flipHorizontal($input)
{
    $ext = strtolower(end(explode('.',$input)));
    switch($ext)
    {
        case 'png':
            $img = imagecreatefrompng($input);
            break;
        case 'jpg':
        case 'jpeg':
            $img = imagecreatefromjpeg($input);
            break;
        case 'gif':
            $img = imagecreatefromgif($input);
            break;
        default:
            die("Unable to flip image - wrong extension");
    }
    $size_x = imagesx($img);
    $size_y = imagesy($img);
    $temp = imagecreatetruecolor($size_x, $size_y);
    $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
    if($x)
    {
        switch($ext)
        {
            case 'png':
                header("Content-type: image/png");
                imagepng($temp);
                break;
            case 'jpg':
            case 'jpeg':
                header("Content-type: image/jpeg");
                imagejpeg($temp,'',90);
                break;
            case 'gif':
                header("Content-type: image/gif");
                imagegif($temp);
                break;
            default:
                die("Unable to flip image - wrong extension");
        }
    }
    else
    {
        die("Unable to flip image");
    }
}
flipHorizontal('
http://www.habbo.dk/habbo-imaging/avatar/8530418018255052850230005014400518a8123a77f7e4c686d49c864dbc5f9.gif');
?>
Den har dog også problemet med trans-color!
Jeg prøvede med et hack at rette det på følgende måde:
case 'gif':
                header("Content-type: image/gif");
                $trans_color = imagecolorallocate($temp, 0, 0, 0);
                imagecolortransparent($temp, $trans_color);
                imagegif($temp);
                break;
Men så forsvinder alle sorte farver! :o(