3 require __DIR__ . '/data/surrogator.config.php';
6 logErr('$rawDir not set');
10 logErr('$varDir not set');
14 logErr('$sizes not set');
17 if (!isset($maxSize)) {
18 logErr('$maxSize not set');
23 if (!is_dir($varDir . '/square')) {
24 log('Creating square dir: ' . $varDir . '/square');
25 mkdir($varDir . '/square', 0755, true);
27 log('sizes: ' . implode(', ', $sizes));
28 foreach ($sizes as $size) {
29 if (!is_dir($varDir . '/' . $size)) {
30 log('Creating size dir: ' . $varDir . '/' . $size);
31 mkdir($varDir . '/' . $size, 0755);
35 $dir = new \RegexIterator(
36 new \DirectoryIterator($rawDir),
39 foreach ($dir as $fileInfo) {
40 $origPath = $fileInfo->getPathname();
41 $fileName = $fileInfo->getFilename();
42 $ext = strtolower(substr($fileName, strrpos($fileName, '.') + 1));
43 $squarePath = $varDir . '/square/'
44 . substr($fileName, 0, -strlen($ext)) . 'png';
46 log('processing ' . $fileName);
47 if (image_uptodate($origPath, $squarePath)) {
48 log(' image up to date');
52 if (!createSquare($origPath, $ext, $squarePath, $maxSize)) {
56 if ($fileName == 'default.png') {
57 $md5 = $sha256 = 'default';
59 list($md5, $sha256) = getHashes($fileName);
62 log(' Creating sizes for ' . $fileName);
64 log(' sha256: ' . $sha256);
65 $imgSquare = imagecreatefrompng($squarePath);
66 foreach ($sizes as $size) {
67 $sizePathMd5 = $varDir . '/' . $size . '/' . $md5 . '.png';
68 $sizePathSha256 = $varDir . '/' . $size . '/' . $sha256 . '.png';
70 $imgSize = imagecreatetruecolor($size, $size);
71 imagealphablending($imgSize, false);
73 $imgSize, 0, 0, $size - 1, $size - 1,
74 imagecolorallocatealpha($imgSize, 0, 0, 0, 127)
79 $size, $size, $maxSize, $maxSize
81 imagesavealpha($imgSize, true);
82 imagepng($imgSize, $sizePathMd5);
83 imagepng($imgSize, $sizePathSha256);
84 imagedestroy($imgSize);
87 imagedestroy($imgSquare);
91 function getHashes($fileName)
93 $fileNameNoExt = substr($fileName, 0, -strlen(strrpos($fileName, '.')) - 2);
94 $emailAddress = trim(strtolower($fileNameNoExt));
97 md5($emailAddress), hash('sha256', $emailAddress)
102 function createSquare($origPath, $ext, $targetPath, $maxSize)
105 $imgOrig = imagecreatefrompng($origPath);
106 } else if ($ext == 'jpg' || $ext == 'jpeg') {
107 $imgOrig = imagecreatefromjpeg($origPath);
113 if ($imgOrig === false) {
114 logErr('Error loading image file: ' . $origPath);
118 $imgSquare = imagecreatetruecolor($maxSize, $maxSize);
119 imagealphablending($imgSquare, false);
120 imagefilledrectangle(
121 $imgSquare, 0, 0, $maxSize - 1, $maxSize - 1,
122 imagecolorallocatealpha($imgSquare, 0, 0, 0, 127)
124 imagealphablending($imgSquare, true);
126 $oWidth = imagesx($imgOrig);
127 $oHeight = imagesy($imgOrig);
128 if ($oWidth > $oHeight) {
129 $flScale = $maxSize / $oWidth;
131 $flScale = $maxSize / $oHeight;
133 $nWidth = (int)($oWidth * $flScale);
134 $nHeight = (int)($oHeight * $flScale);
137 $imgSquare, $imgOrig,
138 ($maxSize - $nWidth) / 2, ($maxSize - $nHeight) / 2,
144 imagesavealpha($imgSquare, true);
145 imagepng($imgSquare, $targetPath);
147 imagedestroy($imgSquare);
148 imagedestroy($imgOrig);
152 function image_uptodate($sourcePath, $targetPath)
154 if (!file_exists($targetPath)) {
158 if (filemtime($sourcePath) > filemtime($targetPath)) {
171 function logErr($msg)
173 file_put_contents('php://stderr', $msg . "\n");