0) OR !($rotate < 4)) exit; $emblem = $_GET['emblem']; $degrees = $_GET['r'] * 90; // Content type header('Content-type: image/jpeg'); //TODO Add cache $simage = @imagecreatefrompng($emblem); if(!$simage) { exit; } $background = imagecolorallocate($simage, 0, 0, 0); //$simage = rotateMaintain($simage, $degrees, $background); $simage = imagerotate($simage, $degrees, 0); // removing the black from the placeholder imagecolortransparent($simage, $background); // turning off alpha blending (to ensure alpha channel information // is preserved, rather than removed (blending with the rest of the // image in the form of black)) imagealphablending($simage, false); // turning on alpha channel information saving (to ensure the full range // of transparency is preserved) imagesavealpha($simage, true); imagepng($simage); //Couldn't do this and maintain transparency ? function rotateMaintain($img1, $angle, $background) { $width_before = imagesx($img1); $height_before = imagesy($img1); $img1 = imagerotate($img1, $angle, $background); //but imagerotate scales, so we clip to the original size $img2 = @imagecreatetruecolor($width_before, $height_before); $new_width = imagesx($img1); // whese dimensions are $new_height = imagesy($img1);// the scaled ones (by imagerotate) imagecopyresampled( $img2, $img1, 0, 0, ($new_width-$width_before)/2, ($new_height-$height_before)/2, $width_before, $height_before, $width_before, $height_before ); return $img2; } ?>