1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<?php
// File and rotation
$rotate = $_GET['r'] * 1;
//Probably not the best syntax.
if (!is_int($rotate) OR !($rotate > 0) OR !($rotate < 4)) exit;
//Example value: 'OffsetStripesDiagonal_B.png';
$emblem = $_GET['emblem'];
$degrees = $_GET['r'] * 90;
// Content type
header('Content-type: image/jpeg');
//TODO Update Cache
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
$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;
}
?>
|