getCode() ?: 500); $target = '500.png'; if (file_exists($target)) { header("X-Error: ".$e->getMessage()); header('Content-type: '.mime_content_type($target)); readfile($target); exit; } trigger_error("thumbnail creation failed: ".$e->getMessage(), E_USER_WARNING); exit; } header('Content-type: '.mime_content_type($target)); readfile($target); exit; function mkthumb($source, $size) { if (strpos($size, 'x') !== FALSE) { list ($width, $height) = explode('x', $size); if (empty($height)) { $height = $width * 4; } } else { $height = $size; } if (empty($width)) { $width = $height * 4; } $target = "thumb/$size/$source"; if (isset($_GET['backend'])) { $backend = $_GET['backend']; } elseif (file_exists($target)) { return $target; } elseif (extension_loaded('gd')) { $backend = 'gd'; } else { $backend = 'exec'; } $backend = "mkthumb_$backend"; @mkdir(dirname($target), 0777, TRUE); $backend($source, $target, $width, $height); return $target; } function mkthumb_gd($source, $target, $width, $height) { $data = imagecreatefromstring(file_get_contents($source)); if (!$data) throw new Exception("error reading $source"); $orgwidth = imagesx($data); $orgheight = imagesy($data); $width = min($width, $orgwidth * $height / $orgheight); $gd = imagecreatetruecolor($width, $height); //TODO: trim imagecopyresampled($gd, $data, 0, 0, 0, 0, $width, $height, $orgwidth, $orgheight); imagejpeg($gd, $target, 90); } function mkthumb_exec($source, $target, $width, $height) { if (!function_exists('popen')) { throw new Exception("exec disallowed on this server", 501); } $cmd = implode(' ', array_map('escapeshellarg', [ 'convert', '-trim', '-resize', "${width}x${height}", '-quality', '90%', $source, "jpg:$target" ])); $return = shell_exec("$cmd 2>&1"); if ($return) { throw new Exception($return); } }