X-Git-Url: https://git.cweiske.de/surrogator.git/blobdiff_plain/74edeb92a87c737afa253746317b10f7e89cafe9..9953ac3142e7813f252c90f8c2ce1669e7825566:/surrogator.php diff --git a/surrogator.php b/surrogator.php old mode 100644 new mode 100755 index bad8a45..dd907e0 --- a/surrogator.php +++ b/surrogator.php @@ -1,6 +1,83 @@ +#!/usr/bin/env php + * @license http://www.gnu.org/licenses/agpl.html AGPLv3 or later + * @link http://git.cweiske.de/?p=surrogator.git + */ namespace surrogator; -require __DIR__ . '/data/surrogator.config.php'; +$cfgFile = __DIR__ . '/data/surrogator.config.php'; +if (!file_exists($cfgFile)) { + $cfgFile = '/etc/surrogator.config.php'; + if (!file_exists($cfgFile)) { + logErr( + "Configuration file does not exist.\n" + . "Copy data/surrogator.config.php.dist to data/surrogator.config.php" + ); + exit(2); + } +} +require $cfgFile; + +array_shift($argv); +$files = array(); +foreach ($argv as $arg) { + if ($arg == '-v' || $arg == '--verbose') { + ++$logLevel; + } else if ($arg == '-vv') { + $logLevel += 2; + } else if ($arg == '-q' || $arg == '--quiet') { + $logLevel = 0; + } else if ($arg == '-f' || $arg == '--force') { + $forceUpdate = true; + } else if ($arg == '-h' || $arg == '--help') { + showHelp(); + exit(4); + } else if ($arg == '--version') { + echo "surrogator 0.0.1\n"; + exit(); + } else if (file_exists($arg)) { + $files[] = $arg; + } else { + logErr('Unknown argument: ' . $arg); + exit(3); + } +} + +/** + * Echos the --help screen. + * + * @return void + */ +function showHelp() +{ + echo <<getPathname(); $fileName = $fileInfo->getFilename(); $ext = strtolower(substr($fileName, strrpos($fileName, '.') + 1)); @@ -44,7 +139,7 @@ foreach ($dir as $fileInfo) { . substr($fileName, 0, -strlen($ext)) . 'png'; log('processing ' . $fileName, 1); - if (image_uptodate($origPath, $squarePath)) { + if (imageUptodate($origPath, $squarePath)) { log(' image up to date', 2); continue; } @@ -55,15 +150,18 @@ foreach ($dir as $fileInfo) { if ($fileName == 'default.png') { $md5 = $sha256 = 'default'; + } else if ($fileName == 'mm.png') { + $md5 = $sha256 = 'mm'; } else { list($md5, $sha256) = getHashes($fileName); } - log(' Creating sizes for ' . $fileName, 2); + log(' creating sizes for ' . $fileName, 2); log(' md5: ' . $md5, 3); log(' sha256: ' . $sha256, 3); $imgSquare = imagecreatefrompng($squarePath); foreach ($sizes as $size) { + log(' size ' . $size, 3); $sizePathMd5 = $varDir . '/' . $size . '/' . $md5 . '.png'; $sizePathSha256 = $varDir . '/' . $size . '/' . $sha256 . '.png'; @@ -74,7 +172,7 @@ foreach ($dir as $fileInfo) { imagecolorallocatealpha($imgSize, 0, 0, 0, 127) ); imagecopyresampled( - $imgSize, $imgSquare, + $imgSize, $imgSquare, 0, 0, 0, 0, $size, $size, $maxSize, $maxSize ); @@ -82,12 +180,18 @@ foreach ($dir as $fileInfo) { imagepng($imgSize, $sizePathMd5); imagepng($imgSize, $sizePathSha256); imagedestroy($imgSize); - + } imagedestroy($imgSquare); } - +/** + * Create and return md5 and sha256 hashes from a filename. + * + * @param string $fileName filename without path, e.g. "foo@example.org.png" + * + * @return array Array with 2 values: md5 and sha256 hash + */ function getHashes($fileName) { $fileNameNoExt = substr($fileName, 0, -strlen(strrpos($fileName, '.')) - 2); @@ -98,7 +202,17 @@ function getHashes($fileName) ); } - +/** + * Creates the square image from the given image in maximum size. + * Scales the image up or down and makes the non-covered parts transparent. + * + * @param string $origPath Full path to original image + * @param string $ext File extension ("jpg" or "png") + * @param string $targetPath Full path to target image file + * @param integer $maxSize Maxium image size the server supports + * + * @return boolean True if all went well, false if there was an error + */ function createSquare($origPath, $ext, $targetPath, $maxSize) { if ($ext == 'png') { @@ -134,7 +248,7 @@ function createSquare($origPath, $ext, $targetPath, $maxSize) $nHeight = (int)($oHeight * $flScale); imagecopyresampled( - $imgSquare, $imgOrig, + $imgSquare, $imgOrig, ($maxSize - $nWidth) / 2, ($maxSize - $nHeight) / 2, 0, 0, $nWidth, $nHeight, @@ -149,12 +263,23 @@ function createSquare($origPath, $ext, $targetPath, $maxSize) return true; } -function image_uptodate($sourcePath, $targetPath) +/** + * Check if the target file is newer than the source file. + * + * @param string $sourcePath Full source file path + * @param string $targetPath Full target file path + * + * @return boolean True if target file is newer than the source file + */ +function imageUptodate($sourcePath, $targetPath) { + global $forceUpdate; + if ($forceUpdate) { + return false; + } if (!file_exists($targetPath)) { return false; } - if (filemtime($sourcePath) > filemtime($targetPath)) { //source newer return false; @@ -163,6 +288,14 @@ function image_uptodate($sourcePath, $targetPath) return true; } +/** + * Write a log message to stdout + * + * @param string $msg Message to write + * @param integer $level Log level - 1 is important, 3 is unimportant + * + * @return void + */ function log($msg, $level = 1) { global $logLevel; @@ -171,6 +304,13 @@ function log($msg, $level = 1) } } +/** + * Write an error message to stderr + * + * @param string $msg Message to write + * + * @return void + */ function logErr($msg) { file_put_contents('php://stderr', $msg . "\n");