View difference between Paste ID: pvJkTR3r and UPcC5vgK
SHOW: | | - or go back to the newest paste.
1
<?php
2
	try
3
	{
4-
		$abyss = array(brightness=>-18,contrast=>1,hue=>275,saturation=>0.0234375,lightness=>1.09375);
4+
		$background = array(brightness=>-18,contrast=>1,hue=>275,saturation=>0.0234375,lightness=>1.09375);
5-
		$white = array(brightness=>45,contrast=>1.44531,hue=>10,saturation=>0.0234375,lightness=>1.5625);
5+
		$primary = array(brightness=>-2,contrast=>1,hue=>135,saturation=>0.546875,lightness=>0.976563);
6-
		$grape = array(brightness=>-3,contrast=>1,hue=>305,saturation=>0.507813,lightness=>0.9375);
6+
		$secondary = array(brightness=>4,contrast=>1,hue=>240,saturation=>0.625,lightness=>1.09375);
7
		
8-
		$image1 = new Imagick("./emblems/2a.png");
8+
		$image1 = new Imagick("./emblems/58a.png");
9-
		$image2 = new Imagick("./emblems/2b.png");
9+
		$image2 = new Imagick("./emblems/58b.png");
10-
		$imagebk = new Imagick("./backgrounds/19.png");
10+
		$imagebk = new Imagick("./backgrounds/0.png");
11
		
12
		// Re-colour Emblem Primary Part
13
		$it = $image1->getPixelIterator();
14
		foreach( $it as $row => $pixels )
15
		{
16
			foreach ( $pixels as $column => $pixel )
17
			{
18
				$alpha = $pixel->getColorValue(imagick::COLOR_ALPHA);
19
				if($alpha>0){
20
					$colour = $pixel->getColor();
21
					$baseRGB = array($colour['r'],$colour['g'],$colour['b']);
22-
					$rgb = compositeColorShiftRgb($white, $baseRGB);
22+
					$rgb = compositeColorShiftRgb($primary, $baseRGB);
23
					$r = $rgb[0];
24
					$g = $rgb[1];
25
					$b = $rgb[2];
26
					$pixel->setColor( "rgba($r,$g,$b,$alpha)" );
27
				}
28
			}
29
			$it->syncIterator();
30
		}
31
		
32
		// Re-colour Emblem Secondary Part
33
		$it = $image2->getPixelIterator();
34
		foreach( $it as $row => $pixels )
35
		{
36
			foreach ( $pixels as $column => $pixel )
37
			{
38
				$alpha = $pixel->getColorValue(imagick::COLOR_ALPHA);
39
				if($alpha>0){
40
					$colour = $pixel->getColor();
41
					$baseRGB = array($colour['r'],$colour['g'],$colour['b']);
42-
					$rgb = compositeColorShiftRgb($grape, $baseRGB);
42+
					$rgb = compositeColorShiftRgb($secondary, $baseRGB);
43
					$r = $rgb[0];
44
					$g = $rgb[1];
45
					$b = $rgb[2];
46
					$pixel->setColor( "rgba($r,$g,$b,$alpha)" );
47
				}
48
			}
49
			$it->syncIterator();
50
		}
51
		
52
		// Re-colour Emblem Background Part
53
		$it = $imagebk->getPixelIterator();
54
		foreach( $it as $row => $pixels )
55
		{
56
			foreach ( $pixels as $column => $pixel )
57
			{
58
				$alpha = $pixel->getColorValue(imagick::COLOR_ALPHA);
59
				if($alpha>0){
60
					$colour = $pixel->getColor();
61
					$baseRGB = array($colour['r'],$colour['g'],$colour['b']);
62-
					$rgb = compositeColorShiftRgb($abyss, $baseRGB);
62+
					$rgb = compositeColorShiftRgb($background, $baseRGB);
63
					$r = $rgb[0];
64
					$g = $rgb[1];
65
					$b = $rgb[2];
66
					$pixel->setColor( "rgba($r,$g,$b,$alpha)" );
67
				}
68
			}
69
			$it->syncIterator();
70
		}
71
		
72
		$image1->compositeImage( $image2, $image2->getImageCompose(), 0, 0 );
73
		$imagebk->compositeImage( $image1, $image1->getImageCompose(), 0, 0 );
74
		header("Content-Type: image/png");
75
		echo $imagebk;
76
	}
77
	catch(Exception $e)
78
	{
79
		echo $e->getMessage();
80
	}
81
	
82
	// Function matrix_multiply by smiley: https://gist.github.com/codemasher/b869faa7603e1934c28d
83
	function matrix_multiply($m1, $m2){
84
		$r = count($m1);
85
		$c = count($m2[0]);
86
		$p = count($m2);
87
		if(count($m1[0]) != $p){
88
			return false; //incompatible matrix
89
		}
90
		$m3 = array();
91
		for($i = 0; $i < $r; $i++){
92
			for($j = 0; $j < $c; $j++){
93
				$m3[$i][$j] = 0;
94
				for($k = 0; $k < $p; $k++){
95
					$m3[$i][$j] += $m1[$i][$k]*$m2[$k][$j];
96
				}
97
			}
98
		}
99
		return ($m3);
100
	}
101
	
102
	
103
	// Function compositeColorShiftRgb by smiley: https://gist.github.com/codemasher/b869faa7603e1934c28d
104
	function compositeColorShiftRgb($hslbc, $base){
105
		//colors from the response .json -> material
106
		$h = ($hslbc['hue']*pi())/180;
107
		$s = $hslbc['saturation'];
108
		$l = $hslbc['lightness'];
109
		$b = $hslbc['brightness']/128;
110
		$c = $hslbc['contrast'];
111
	 
112
		// 4x4 identity matrix
113
		$matrix = array(
114
			array(1, 0, 0, 0),
115
			array(0, 1, 0, 0),
116
			array(0, 0, 1, 0),
117
			array(0, 0, 0, 1)
118
		);
119
	 
120
		if($b != 0 || $c != 1){
121
			// process brightness and contrast
122
			$t = 128*(2*$b+1-$c);
123
			$mult = array(
124
				array($c,  0,  0, $t),
125
				array( 0, $c,  0, $t),
126
				array( 0,  0, $c, $t),
127
				array( 0,  0,  0,  1)
128
			);
129
			$matrix = matrix_multiply($mult, $matrix);
130
		}
131
	 
132
		if($h != 0 || $s != 1 || $l != 1){
133
			// transform to HSL
134
			$multRgbToHsl = array(
135
				array( 0.707107, 0,        -0.707107, 0),
136
				array(-0.408248, 0.816497, -0.408248, 0),
137
				array( 0.577350, 0.577350,  0.577350, 0),
138
				array( 0,        0,         0,        1)
139
			);
140
			$matrix = matrix_multiply($multRgbToHsl, $matrix);
141
	 
142
			// process adjustments
143
			$cosHue = cos($h);
144
			$sinHue = sin($h);
145
			$mult = array(
146
				array( $cosHue * $s, $sinHue * $s,  0, 0),
147
				array(-$sinHue * $s, $cosHue * $s,  0, 0),
148
				array(            0,            0, $l, 0),
149
				array(            0,            0,  0, 1)
150
			);
151
			$matrix = matrix_multiply($mult, $matrix);
152
	 
153
			// transform back to RGB
154
			$multHslToRgb = array(
155
				array( 0.707107, -0.408248, 0.577350, 0),
156
				array( 0,         0.816497, 0.577350, 0),
157
				array(-0.707107, -0.408248, 0.577350, 0),
158
				array( 0,         0,        0,        1)
159
			);
160
			$matrix = matrix_multiply($multHslToRgb, $matrix);
161
		}
162
	 
163
		// apply the color transformation
164
		$bgrVector = array(
165
			array($base[2]),
166
			array($base[1]),
167
			array($base[0]),
168
			array(1)
169
		);
170
		$bgrVector =  matrix_multiply($matrix,$bgrVector);
171
		$rgb = array($bgrVector[2][0], $bgrVector[1][0], $bgrVector[0][0]);
172
	 
173
		// clamp the values
174
		$rgb[0] = floor(max(0, min(255, $rgb[0])));
175
		$rgb[1] = floor(max(0, min(255, $rgb[1])));
176
		$rgb[2] = floor(max(0, min(255, $rgb[2])));
177
	 
178
		return $rgb;
179
	}
180
?>