3 require __DIR__ . '/data/surrogator.config.php';
6 logErr('$rawDir not set');
9 logErr('$varDir not set');
12 logErr('$sizes not set');
14 if (!isset($maxSize)) {
15 logErr('$maxSize not set');
19 if (!is_dir($varDir . '/square')) {
20 log('Creating square dir: ' . $varDir . '/square');
21 mkdir($varDir . '/square', 0755, true);
23 log('sizes: ' . implode(', ', $sizes));
24 foreach ($sizes as $size) {
25 if (!is_dir($varDir . '/' . $size)) {
26 log('Creating size dir: ' . $varDir . '/' . $size);
27 mkdir($varDir . '/' . $size, 0755);
31 $dir = new \RegexIterator(
32 new \DirectoryIterator($rawDir),
35 foreach ($dir as $fileInfo) {
36 $origPath = $fileInfo->getPathname();
37 $fileName = $fileInfo->getFilename();
38 $ext = strtolower(substr($fileName, strrpos($fileName, '.') + 1));
39 $squarePath = $varDir . '/square/'
40 . substr($fileName, 0, -strlen($ext)) . 'png';
42 log('processing ' . $fileName);
43 if (image_uptodate($origPath, $squarePath)) {
44 log(' image up to date');
48 if (!createSquare($origPath, $ext, $squarePath, $maxSize)) {
52 if ($fileName == 'default.png') {
53 $md5 = $sha256 = 'default';
55 list($md5, $sha256) = getHashes($fileName);
58 log(' Creating sizes for ' . $fileName);
60 log(' sha256: ' . $sha256);
61 $imgSquare = imagecreatefrompng($squarePath);
62 foreach ($sizes as $size) {
63 $sizePathMd5 = $varDir . '/' . $size . '/' . $md5 . '.png';
64 $sizePathSha256 = $varDir . '/' . $size . '/' . $sha256 . '.png';
66 $imgSize = imagecreatetruecolor($size, $size);
67 imagealphablending($imgSize, false);
69 $imgSize, 0, 0, $size - 1, $size - 1,
70 imagecolorallocatealpha($imgSize, 0, 0, 0, 127)
75 $size, $size, $maxSize, $maxSize
77 imagesavealpha($imgSize, true);
78 imagepng($imgSize, $sizePathMd5);
79 imagepng($imgSize, $sizePathSha256);
80 imagedestroy($imgSize);
83 imagedestroy($imgSquare);
87 function getHashes($fileName)
89 $fileNameNoExt = substr($fileName, 0, -strlen(strrpos($fileName, '.')) - 2);
90 $emailAddress = trim(strtolower($fileNameNoExt));
93 md5($emailAddress), hash('sha256', $emailAddress)
98 function createSquare($origPath, $ext, $targetPath, $maxSize)
101 $imgOrig = imagecreatefrompng($origPath);
102 } else if ($ext == 'jpg' || $ext == 'jpeg') {
103 $imgOrig = imagecreatefromjpeg($origPath);
109 if ($imgOrig === false) {
110 logErr('Error loading image file: ' . $origPath);
114 $imgSquare = imagecreatetruecolor($maxSize, $maxSize);
115 imagealphablending($imgSquare, false);
116 imagefilledrectangle(
117 $imgSquare, 0, 0, $maxSize - 1, $maxSize - 1,
118 imagecolorallocatealpha($imgSquare, 0, 0, 0, 127)
120 imagealphablending($imgSquare, true);
122 $oWidth = imagesx($imgOrig);
123 $oHeight = imagesy($imgOrig);
124 if ($oWidth > $oHeight) {
125 $flScale = $maxSize / $oWidth;
127 $flScale = $maxSize / $oHeight;
129 $nWidth = (int)($oWidth * $flScale);
130 $nHeight = (int)($oHeight * $flScale);
133 $imgSquare, $imgOrig,
134 ($maxSize - $nWidth) / 2, ($maxSize - $nHeight) / 2,
140 imagesavealpha($imgSquare, true);
141 imagepng($imgSquare, $targetPath);
143 imagedestroy($imgSquare);
144 imagedestroy($imgOrig);
148 function image_uptodate($sourcePath, $targetPath)
150 if (!file_exists($targetPath)) {
154 if (filemtime($sourcePath) > filemtime($targetPath)) {
167 function logErr($msg)
169 file_put_contents('php://stderr', $msg . "\n");