private function outputImage($query) { extract(Options::getOptions()); $queryParam = sprintf('%s-query', $baseUrl); $pathParam = sprintf('%s-path', $baseUrl); if (empty($query->query[$queryParam]) || empty($query->query[$pathParam])) { return; } $params = $query->query[$queryParam]; $path = preg_replace('/\\.\\.\\//', '', $query->query[$pathParam]); $params = explode('-', $params); $parsed = array(); foreach ($params as $param) { if (preg_match("/(?P<operation>[a-z]{1})(?P<value>[\\S]*)/", $param, $matches) && isset(static::$operations[$matches['operation']])) { $parsed[static::$operations[$matches['operation']]] = $matches['value']; } } foreach ($parsed as $key => $value) { switch ($key) { case 'crop': $dimensions = explode('x', $value); $parsed['width'] = intval($dimensions[0]); $parsed['height'] = intval($dimensions[1]); $parsed['cropped'] = true; unset($parsed[$key]); break; case 'extension': $path .= '.' . preg_replace('/[^0-9a-zA-Z]*/', '', $value); unset($parsed[$key]); break; case 'offset': $dimensions = explode('x', $value); $parsed['offsetX'] = intval($dimensions[0]); $parsed['offsetY'] = intval($dimensions[1]); unset($parsed[$key]); break; case 'width': case 'height': $parsed[$key] = intval($value); break; } } $image = Resize::getImage($path, $parsed); if (is_wp_error($image)) { wp_die($image); } // Set caching headers, and stream header('Pragma: public'); header('Cache-Control: max-age=86400'); header('Expires: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', time() + 86400)); $image->stream(); exit; }