tempName, $fileName, $resizeWidth, $resizeHeight, $resizeCrop) : $fileInstance->saveAs($fileName); if (!$uploaded) { throw new HttpException(500, 'Cannot upload file "' . $fileName . '". Please check write permissions.'); } return Upload::getLink($fileName); } public static function saveBinary($binary_data, $dir = '') { $fileName = Upload::getUploadPath($dir) . DIRECTORY_SEPARATOR . Upload::genFileName("jpg"); $uploaded = file_put_contents($fileName, $binary_data); if (!$uploaded) { throw new HttpException(500, 'Cannot upload file "' . $fileName . '". Please check write permissions.'); } return Upload::getLink($fileName); } /** * * @param unknown $filename * @param unknown $width * @param unknown $height * @param string $crop * @return string */ static function thumb($filename, $width = null, $height = null, $crop = true) { if ($filename && file_exists(($filename = Yii::getAlias('@frontend/web') . $filename))) { $info = pathinfo($filename); $thumbName = $info['filename'] . '-' . md5(filemtime($filename) . (int)$width . (int)$height . (int)$crop) . '.' . $info['extension']; $thumbFile = Yii::getAlias('@frontend/web') . DIRECTORY_SEPARATOR . Upload::$UPLOADS_DIR . DIRECTORY_SEPARATOR . 'thumbs' . DIRECTORY_SEPARATOR . $thumbName; $thumbWebFile = '/' . Upload::$UPLOADS_DIR . '/thumbs/' . $thumbName; if (file_exists($thumbFile)) { return $thumbWebFile; } elseif (FileHelper::createDirectory(dirname($thumbFile), 0777) && self::copyResizedImage($filename, $thumbFile, $width, $height, $crop)) { return $thumbWebFile; } } return ''; } static function copyResizedImage($inputFile, $outputFile, $width, $height = null, $crop = true) { if (extension_loaded('gd')) { try { $image = new GD($inputFile); if ($height) { if ($width && $crop) { $image->cropThumbnail($width, $height); } else { $image->resize($width, $height); } } else { $image->resize($width); } return $image->save($outputFile); } catch (\Exception $e) { \Yii::error("Failed to create thumbnail: ". $e->getMessage()); } } elseif (extension_loaded('imagick')) { $image = new \Imagick($inputFile); if ($height && !$crop) { $image->resizeImage($width, $height, \Imagick::FILTER_LANCZOS, 1, true); } else { $image->resizeImage($width, null, \Imagick::FILTER_LANCZOS, 1); } if ($height && $crop) { $image->cropThumbnailImage($width, $height); } return $image->writeImage($outputFile); } else { throw new HttpException(500, 'Please install GD or Imagick extension'); } } }