static function thumbnail($imgPath, &$width = 0, &$height = 0, $tolerance = 0.0, $zoom = true, $force = false, $deferDownload = false, $deferResize = false) { Lms_Timers::start('thumbnail'); if (self::$cache) { $key = md5(serialize(func_get_args())); if ($data = self::$cache->load($key)) { Lms_Timers::stop('thumbnail'); extract($data); return $url; } } Lms_Timers::start('thumbnail1'); if (preg_match('{^https?://}i', $imgPath)) { $path = null; $hash = md5($imgPath); if (!$path) { $fileDirPath = self::$imageDir . implode("/", str_split(substr($hash, 0, 2))) . "/" . $hash; if (is_dir($fileDirPath)) { $folder = Lms_FileSystem::getFolder($fileDirPath); $files = $folder->getFiles(); if ($files->getCount()) { $path = $files->getFirst()->getPath(); } } if (!$path) { if ($deferDownload) { Lms_Timers::stop('thumbnail'); return self::getDeferUrl(func_get_args()); } $tempPath = $fileDirPath . '/tmp'; self::downloadImage($imgPath, $tempPath); $imageFormat = self::getFormat($tempPath); $path = "{$fileDirPath}/image.{$imageFormat}"; Lms_Ufs::rename($tempPath, $path); } } } else { $path = str_replace('\\', '/', $imgPath); } $imageFormat = strtolower(pathinfo($path, PATHINFO_EXTENSION)); Lms_Timers::stop('thumbnail1'); Lms_Timers::start('getimagesize'); $imageSize = getimagesize($path); $imageX = $imageSize[0]; $imageY = $imageSize[1]; $imageType = $imageSize[2]; $imageFormat = self::getFormatByType($imageType); Lms_Timers::stop('getimagesize'); Lms_Timers::start('thumbnail2'); $image = array(); $image['x'] = $imageX; $image['y'] = $imageY; // check resize $k = $height ? ($height - $imageY) / $height : 0; if (!$zoom && $k > 0) { $k = 0; } if ($height && abs($k) > $tolerance) { $image['y'] = $height; $image['x'] = round($image['x'] / (1 - $k)); } $k = $width ? ($width - $image['x']) / $width : 0; if (!$zoom && $k > 0) { $k = 0; } if ($width && abs($k) > $tolerance) { $image['x'] = $width; $image['y'] = round($image['y'] / (1 - $k)); } $width = $image['x']; $height = $image['y']; $prefix = md5($imgPath); $prefix = implode("/", str_split(substr($prefix, 0, 2))) . "/" . $prefix; //$cachepath = LMS_PUBLIC_MEDIA_DIR . 'cache/'; $cachepath = self::$thumbnailDir; if (self::$gdEnabled === null) { self::$gdEnabled = function_exists('imagecreatefromjpeg'); } if (($image['x'] != $imageX || $image['y'] != $imageY || $force) && self::$gdEnabled) { $filepath = $cachepath . $prefix . "_" . $image['x'] . "x" . $image['y'] . "." . $imageFormat; Lms_Timers::start('is_file'); $isFile = is_file($filepath); Lms_Timers::stop('is_file'); if (!$isFile) { if ($deferResize) { Lms_Timers::stop('thumbnail'); return self::getDeferUrl(func_get_args()); } $obj = new Lms_ImageProcessor(); try { $obj->loadfile($path); $obj->resize($image['x'], $image['y']); Lms_FileSystem::createFolder(dirname($filepath), 0777, true); $obj->savefile($filepath); } catch (Exception $e) { //$filepath = LMS_PUBLIC_COMMON_MEDIA_DIR . 'error.jpg'; $filepath = self::$errorImagePath; } } $url = $filepath; } else { $url = $path; } Lms_Timers::stop('thumbnail2'); $url = str_replace('\\', '/', $url); $url = str_replace($_SERVER['DOCUMENT_ROOT'], '', $url); Lms_Timers::stop('thumbnail'); if (self::$cache) { $data = array('url' => $url, 'width' => $width, 'height' => $height); self::$cache->save($data); } return $url; }