/
functions.php
180 lines (169 loc) · 8.05 KB
/
functions.php
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?php
// Ïðåîáðàçîâàíèå Windows 1251 -> Unicode
function win2uni($s)
{
$s = convert_cyr_string($s,'w','i'); // ïðåîáðàçîâàíèå win1251 -> iso8859-5
// ïðåîáðàçîâàíèå iso8859-5 -> unicode:
for ($result='', $i=0; $i<strlen($s); $i++) {
$charcode = ord($s[$i]);
$result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i];
}
return $result;
}
function imagefilterhue($im,$r,$g,$b){
$col = array($r,$b,$g);
$height = imagesy($im);
$width = imagesx($im);
for($x=0; $x<$width; $x++){
for($y=0; $y<$height; $y++){
$pixelrgb = imagecolorat($im,$x,$y);
$cols = imagecolorsforindex($im, $pixelrgb);
$r = $cols['red'];
$g = $cols['green'];
$b = $cols['blue'];
$alpha = $cols['alpha'];
$newR = $col[0];
$newG = $col[2];
$newB =$col[1];
imagesetpixel($im, $x, $y,imagecolorallocatealpha($im, $newR, $newG, $newB, $alpha));
}
}
return $im;
}
/**
* Ïðåîáðàçîâûâàåò html êîä öâåòà â åãî rgb ýêâèâàëåíò
*/
function hex2RGB($hexStr, $returnAsString = false, $seperator = ',') {
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Âûòÿãèâàåì òîëüêî öâåò
$rgbArray = array();
if (strlen($hexStr) == 6) { //Åñëè óêàçàí öâåò ïîëíîñòüþ (#000000)
$colorVal = hexdec($hexStr);
$rgbArray['r'] = 0xFF & ($colorVal >> 0x10);
$rgbArray['g'] = 0xFF & ($colorVal >> 0x8);
$rgbArray['b'] = 0xFF & $colorVal;
} elseif (strlen($hexStr) == 3) { //åñëè óêàçàíà óðåçàíàÿ âåðñèÿ (#000)
$rgbArray['r'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
$rgbArray['g'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
$rgbArray['b'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
} else {
return false; //Íå ïðàâèëüíûé êîä
}
return $returnAsString ? implode($seperator, $rgbArray) : $rgbArray; // âîçâðàùàåì êàê ñòðîêó, èëè êàê àññîöèàòèâíûé ìàññèâ
}
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
if(!isset($pct)){
return false;
}
$pct /= 100;
// Get image width and height
$w = imagesx( $src_im );
$h = imagesy( $src_im );
// Turn alpha blending off
imagealphablending( $src_im, false );
// Find the most opaque pixel in the image (the one with the smallest alpha value)
$minalpha = 127;
for( $x = 0; $x < $w; $x++ )
for( $y = 0; $y < $h; $y++ ){
$alpha = ( imagecolorat( $src_im, $x, $y ) >> 24 ) & 0xFF;
if( $alpha < $minalpha ){
$minalpha = $alpha;
}
}
//loop through image pixels and modify alpha for each
for( $x = 0; $x < $w; $x++ ){
for( $y = 0; $y < $h; $y++ ){
//get current alpha value (represents the TANSPARENCY!)
$colorxy = imagecolorat( $src_im, $x, $y );
$alpha = ( $colorxy >> 24 ) & 0xFF;
//calculate new alpha
if( $minalpha !== 127 ){
$alpha = 127 + 127 * $pct * ( $alpha - 127 ) / ( 127 - $minalpha );
} else {
$alpha += 127 * $pct;
}
//get the color index with new alpha
$alphacolorxy = imagecolorallocatealpha( $src_im, ( $colorxy >> 16 ) & 0xFF, ( $colorxy >> 8 ) & 0xFF, $colorxy & 0xFF, $alpha );
//set pixel with the new color + opacity
if( !imagesetpixel( $src_im, $x, $y, $alphacolorxy ) ){
return false;
}
}
}
// The image copy
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);
}
function drawCaption($string, $size, $angle){
$font="font/tahomab.ttf";
$bbox = imagettfbbox($size, $angle, $font, win2uni($string)); // îïðåäåëÿåì ðàçìåð áîêñà ïîä ôàìèëèþ
$width=$bbox[2]-$bbox[0]+5; // øèðèíà áîêñà
$height=$bbox[1]-$bbox[7]+5; // âûñîòà áîêñà
$box=imagecreatetruecolor($width,$height); // ñîçäàåì êîíòåéíåð ïîä âñ¸
$black = imagecolorallocate($box, 0, 0, 0);
$transparent = imagecolorallocatealpha($box, 0, 0, 0, 127); // óñòàíàâëèâàåì ïðîçðà÷íûé öâåò
imagefill($box, 0, 0, $transparent); // çàïîëíÿåì ïðîçðà÷íîñòüþ
imageSaveAlpha($box, true); // ñîçðàíÿåì
imageAlphaBlending($box, false); // êîïèðîâàòü ñþäà áóäåì âìåñòå ñ íàñòðîéêàìè
imagettftext($box, $size, $angle, 0, $height, $black, $font, $string); // íàêëàäûâàåì èìÿ-ôàìèëèþ
return $box;
}
function generateName($length = 8){
$chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789';
$numChars = strlen($chars);
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}
return $string;
}
function drawField($team) {
$field=imagecreatefromjpeg("img/field.jpg");
foreach ($team->players as $player){
$img=drawPlayer($player->number, $player->name);
$width=imagesx($img);
$height=imagesy($img);
$posX=$player->x-($width-26)/2;
$posY=$player->y-10;
imageAlphaBlending($field, true); // êîïèðîâàòü ñþäà áóäåì âìåñòå ñ íàñòðîéêàìè
imageSaveAlpha($field, true); // ñîõðàíÿåì
imageCopy($field, $img, $posX, $posY, 0, 0, $width, $height); //êîïèðóåì êàðòèíêó ñ ôîðìîé â ïóñòîé áîêñ
}
$copyright=drawCaption("http://www.ezheloko.ru/tactic", 12,0);
imagecopymerge_alpha( $field , $copyright, 240 , imagesY($field)-25 , 0 , 0 , imagesX($copyright) , imagesY($copyright) , 30 );
$name=generateName();
$name="formations/".$name.".png";
imagePng($field, $name);
return $name;
}
function drawPlayer($number,$name){
$font="font/tahomab.ttf";
$fontb="font/tahomab.ttf";
$player=imagecreatetruecolor(46,46); // ïóñòîå èçîáðàæåíèå, íóæíî äëÿ ïðîçðà÷íîñòè
$transparent = imagecolorallocatealpha($player, 0, 0, 0, 127); // óñòàíàâëèâàåì ïðîçðà÷íûé öâåò
imagefill($player, 0, 0, $transparent); // çàïîëíÿåì èì êîíòåéíåð
imageSaveAlpha($player, true); // ñîõðàíÿåì ïðîçðà÷íîñòü
imageAlphaBlending($player, true); // äåëàåì òàê, ÷òîáû âñå ÷òî êîïèðîâàëîñü â êîíòåéíåð, êîïèðîâàëîñü âìåñòå ñ íàñòðîéêàìè ïðîçðà÷íîñòè
$src1=imagecreatefrompng("img/tshirt.png"); // È êîïèðóåì íàøó ôîðìó, â êîòîðîé ýòîé ïðîçðà÷íîñòè çàâàëèñü
imageCopy($player, $src1, 0, 0, 0, 0, 46, 46); //êîïèðóåì êàðòèíêó ñ ôîðìîé â ïóñòóþ êàðòèíêó (êóäà êîïèðóåì, ÷òî êîïèðóåì, êîîðäèíàòàÕ áîêñà, êîîðäèíàòàY áîêñà, êîîðäèíàòà Õ êàðòèíêè, êîîðäèíàòà Y êàðòèíêè, øèðèíà êàðòèíêè, âûñîòà êàðòèíêè)
$white = imagecolorallocate($player, 255, 255, 255); // îïðåäåëÿåì öâåò òåêñòà - áåëûé
$black = imagecolorallocate($player, 0, 0, 0); // îïðåäåëÿåì öâåò òåêñòà - ÷åðíûé
imageAlphaBlending($player, true); // À òåïåðü äåëàåì òàê, ÷òîáû òî ÷òî áóäåò íàðèñîâàíî ïîçäíåå (íàëîæåí òåêñò), áðàëî èìåþùèåñÿ íàñòðîéêè ïðîçðà÷íîñòè.
$nbox = imagettfbbox(10, 0, $fontb, $number); // îïðåäåëÿåì ðàçìåð áîêñà ïîä íîìåð
$nwidth=$nbox[2]-$nbox[0]; // øèðèíà áîêñà
$nposition=round((46/2)-($nwidth/2));
imagettftext($player, 10, 0, $nposition, 30, $white, $fontb, $number); // íàêëàäûâàåì íîìåð
$bbox = imagettfbbox(10, 0, $font, $name); // îïðåäåëÿåì ðàçìåð áîêñà ïîä ôàìèëèþ
$width=$bbox[2]-$bbox[0]; // øèðèíà áîêñà
$height=$bbox[1]-$bbox[7]; // âûñîòà áîêñà
$height+=50; // äîáàâëÿåì 50 ïèêñåëåé äëÿ ïèêòîãðàììû ôîðìû
if ($width<46) {$textPosition=round((46/2)-($width/2)); $width=46;} else $textPosition=0; // åñëè øèðèíà áîêñà äëÿ òåêñòà ìåíüøå øèðèíû ôîðìû - îáðåçàòü íå áóäåì. À òåêñò íåìíîãî ñìåñòèì.
$box=imagecreatetruecolor($width,$height); // ñîçäàåì êîíòåéíåð ïîä âñ¸
imagefill($box, 0, 0, $transparent); // çàïîëíÿåì ïðîçðà÷íîñòüþ
imageSaveAlpha($box, true); // ñîçðàíÿåì
imageAlphaBlending($box, false); // êîïèðîâàòü ñþäà áóäåì âìåñòå ñ íàñòðîéêàìè
$x=round(($width/2)-(46/2)); // ïîçèöèîíèðóåì êàðòèíêó ñ ôîðìîé ïîñåðåäèíå
imageCopy($box, $player, $x, 0, 0, 0, 46, 46); //êîïèðóåì êàðòèíêó ñ ôîðìîé â ïóñòîé áîêñ
//imageAlphaBlending($box, true); //âåðòàåì íàñòðîéêè ïðîçðà÷íîñòè
imagettftext($box, 10, 0, $textPosition, $height-3, $white, $font, $name); // íàêëàäûâàåì èìÿ-ôàìèëèþ
return $box; //âîçâðàùàåì êàðòèíêó
}
?>