|
1
|
|
|
<?php declare(strict_types=1); |
|
2
|
|
|
|
|
3
|
|
|
if(!extension_loaded('gd')) die('GD ext is required to run this!'); |
|
4
|
|
|
|
|
5
|
|
|
chdir(dirname(__FILE__).'/../'); //Just to make things easier, change dir to project root. |
|
6
|
|
|
const ASSET_FOLDER = 'public/assets'; |
|
7
|
|
|
const ICON_FOLDER = ASSET_FOLDER.'/img/site_icons'; |
|
8
|
|
|
|
|
9
|
|
|
|
|
10
|
|
|
class Spritesheet { |
|
11
|
|
|
private $fileList; |
|
12
|
|
|
private $less; |
|
13
|
|
|
|
|
14
|
|
|
public function __construct() { |
|
15
|
|
|
$this->fileList = $this->getFileList(); |
|
16
|
|
|
$this->less = ""; |
|
17
|
|
|
} |
|
18
|
|
|
|
|
19
|
|
|
public function generate() { |
|
20
|
|
|
$width = (count($this->fileList) * (16 + /* padding */ 2)) - 2; |
|
21
|
|
|
|
|
22
|
|
|
$sheetImage = imagecreatetruecolor($width, 16); |
|
23
|
|
|
imagealphablending($sheetImage, FALSE); |
|
24
|
|
|
imagesavealpha($sheetImage, TRUE); |
|
25
|
|
|
|
|
26
|
|
|
imagefill($sheetImage,0,0,0x7fff0000); |
|
27
|
|
|
|
|
28
|
|
|
$x = 0; |
|
29
|
|
|
foreach ($this->fileList as $filename) { |
|
30
|
|
|
$siteImage = imagecreatefrompng(ICON_FOLDER. "/{$filename}"); |
|
31
|
|
|
imagealphablending($siteImage, TRUE); |
|
32
|
|
|
|
|
33
|
|
|
$dst_x = ((16 + 2) * $x); |
|
34
|
|
|
imagecopyresampled($sheetImage, $siteImage, $dst_x, 0, 0, 0, 16, 16, 16, 16); |
|
35
|
|
|
|
|
36
|
|
|
$this->generateLESS($filename, $dst_x); |
|
37
|
|
|
$x++; |
|
38
|
|
|
} |
|
39
|
|
|
|
|
40
|
|
|
imagepng($sheetImage, ASSET_FOLDER."/img/sites.png"); |
|
41
|
|
|
say("Updates spritesheet!"); |
|
42
|
|
|
$this->modifySiteLESS(); |
|
43
|
|
|
} |
|
44
|
|
|
private function generateLESS(string $filename, int $dst_x) { |
|
45
|
|
|
$parts = pathinfo($filename); |
|
46
|
|
|
|
|
47
|
|
|
$this->less .= "\n". |
|
48
|
|
|
" &.sprite-{$parts['filename']} {\n". |
|
49
|
|
|
" .stitches-sprite(-{$dst_x}px);\n". |
|
50
|
|
|
" }\n"; |
|
51
|
|
|
} |
|
52
|
|
|
private function modifySiteLESS() { |
|
53
|
|
|
$newSiteLESS = trim($this->less); |
|
54
|
|
|
|
|
55
|
|
|
$icons_file = ASSET_FOLDER.'/less/modules/icons.less'; |
|
56
|
|
|
$oldLESS = file_get_contents($icons_file); |
|
57
|
|
|
if(preg_match('/\.sprite-site.*\@cache-version: ([0-9]+);/s', $oldLESS, $cvMatches)) { |
|
58
|
|
|
$cacheVersion = ((int) $cvMatches[1]) + 1; |
|
59
|
|
|
|
|
60
|
|
|
$newLESS = preg_replace('/\.sprite-site.*/s', '',$oldLESS); |
|
61
|
|
|
$newLESS .= ''. |
|
62
|
|
|
".sprite-site {\n". |
|
63
|
|
|
" .sprite();\n". |
|
64
|
|
|
" @cache-version: {$cacheVersion};\n". |
|
65
|
|
|
" background: url('../../img/sites.@{cache-version}.png') no-repeat;\n\n". |
|
66
|
|
|
" {$newSiteLESS}\n". |
|
67
|
|
|
"}\n"; |
|
68
|
|
|
|
|
69
|
|
|
file_put_contents($icons_file, $newLESS); |
|
70
|
|
|
say("Updated LESS!"); |
|
71
|
|
|
} else { |
|
72
|
|
|
die("Can't find cache-version?"); |
|
73
|
|
|
} |
|
74
|
|
|
} |
|
75
|
|
|
|
|
76
|
|
|
private function getFileList() : array { |
|
77
|
|
|
return array_diff(scandir(ICON_FOLDER), array('..', '.')); |
|
78
|
|
|
} |
|
79
|
|
|
} |
|
80
|
|
|
function say(string $text = "") { print "{$text}\n"; } |
|
|
|
|
|
|
81
|
|
|
|
|
82
|
|
|
$Spritesheet = new Spritesheet(); |
|
83
|
|
|
$Spritesheet->generate(); |
|
84
|
|
|
|
This check looks for functions that have already been defined in other files.
Some Codebases, like WordPress, make a practice of defining functions multiple times. This may lead to problems with the detection of function parameters and types. If you really need to do this, you can mark the duplicate definition with the
@ignoreannotation.See also the PhpDoc documentation for @ignore.