Ejemplo n.º 1
0
 /**
  * Upload user avatar on server
  * Make resized images
  *
  * @param  array           $aFile
  * @param  ModuleUser_EntityUser $oUser
  * @return (string|bool)
  */
 public function UploadAvatar($aFile, $oUser)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $sPath = $this->Image_GetIdDir($oUser->getId());
     $aParams = $this->Image_BuildParams('avatar');
     /**
      * Срезаем квадрат
      */
     $oImage = new LiveImage($sFileTmp);
     /**
      * Если объект изображения не создан,
      * возвращаем ошибку
      */
     if ($sError = $oImage->get_last_error()) {
         // Вывод сообщения об ошибки, произошедшей при создании объекта изображения
         // $this->Message_AddError($sError,$this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     $oImage = $this->Image_CropSquare($oImage);
     $oImage->set_jpg_quality($aParams['jpg_quality']);
     $oImage->output(null, $sFileTmp);
     if ($sFileAvatar = $this->Image_Resize($sFileTmp, $sPath, 'avatar_100x100', Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), 100, 100, false, $aParams)) {
         $aSize = Config::Get('module.user.avatar_size');
         foreach ($aSize as $iSize) {
             if ($iSize == 0) {
                 $this->Image_Resize($sFileTmp, $sPath, 'avatar', Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), null, null, false, $aParams);
             } else {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_{$iSize}x{$iSize}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $iSize, $iSize, false, $aParams);
             }
         }
         @unlink($sFileTmp);
         /**
          * Если все нормально, возвращаем расширение загруженного аватара
          */
         return $this->Image_GetWebPath($sFileAvatar);
     }
     @unlink($sFileTmp);
     /**
      * В случае ошибки, возвращаем false
      */
     return false;
 }
Ejemplo n.º 2
0
 /**
  * Загрузить изображение
  * @param type $aFile
  * @return string 
  */
 public function UploadTopicPhoto($aFile)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileName = func_generator(10);
     $sPath = Config::Get('path.uploads.images') . '/topic/' . date('Y/m/d') . '/';
     if (!is_dir(Config::Get('path.root.server') . $sPath)) {
         mkdir(Config::Get('path.root.server') . $sPath, 0755, true);
     }
     $sFileTmp = Config::Get('path.root.server') . $sPath . $sFileName;
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $aParams = $this->Image_BuildParams('photoset');
     $oImage = new LiveImage($sFileTmp);
     /**
      * Если объект изображения не создан,
      * возвращаем ошибку
      */
     if ($sError = $oImage->get_last_error()) {
         // Вывод сообщения об ошибки, произошедшей при создании объекта изображения
         $this->Message_AddError($sError, $this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     /**
      * Превышает максимальные размеры из конфига
      */
     if ($oImage->get_image_params('width') > Config::Get('view.img_max_width') or $oImage->get_image_params('height') > Config::Get('view.img_max_height')) {
         $this->Message_AddError($this->Lang_Get('topic_photoset_error_size'), $this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     // Добавляем к загруженному файлу расширение
     $sFile = $sFileTmp . '.' . $oImage->get_image_params('format');
     rename($sFileTmp, $sFile);
     $aSizes = Config::Get('module.topic.photoset.size');
     foreach ($aSizes as $aSize) {
         // Для каждого указанного в конфиге размера генерируем картинку
         $sNewFileName = $sFileName . '_' . $aSize['w'];
         $oImage = new LiveImage($sFile);
         if ($aSize['crop']) {
             $this->Image_CropProportion($oImage, $aSize['w'], $aSize['h'], true);
             $sNewFileName .= 'crop';
         }
         $this->Image_Resize($sFile, $sPath, $sNewFileName, Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $aSize['w'], $aSize['h'], true, $aParams, $oImage);
     }
     return $this->Image_GetWebPath($sFile);
 }
Ejemplo n.º 3
0
 /**
  * Вырезает максимально возможный квадрат
  *
  * @param  LiveImage $oImage
  * @return LiveImage
  */
 public function CropSquare(LiveImage $oImage)
 {
     if (!$oImage || $oImage->get_last_error()) {
         return false;
     }
     $iWidth = $oImage->get_image_params('width');
     $iHeight = $oImage->get_image_params('height');
     /**
      * Если высота и ширина совпадают, то возвращаем изначальный вариант
      */
     if ($iWidth == $iHeight) {
         return $oImage;
     }
     /**
      * Вырезаем квадрат из центра
      */
     $iNewSize = min($iWidth, $iHeight);
     $oImage->crop($iNewSize, $iNewSize, ($iWidth - $iNewSize) / 2, ($iHeight - $iNewSize) / 2);
     /**
      * Возвращаем объект изображения
      */
     return $oImage;
 }
Ejemplo n.º 4
0
 /**
  * Вырезает максимально возможный прямоугольный в нужной пропорции
  *
  * @param LiveImage $oImage	Объект изображения
  * @param int $iW	Ширина для определения пропорции
  * @param int $iH	Высота для определения пропорции
  * @param bool $bCenter	Вырезать из центра
  * @return LiveImage
  */
 public function CropProportion(LiveImage $oImage, $iW, $iH, $bCenter = true)
 {
     if (!$oImage || $oImage->get_last_error()) {
         return false;
     }
     $iWidth = $oImage->get_image_params('width');
     $iHeight = $oImage->get_image_params('height');
     /**
      * Если высота и ширина уже в нужных пропорциях, то возвращаем изначальный вариант
      */
     $iProp = round($iW / $iH, 2);
     if (round($iWidth / $iHeight, 2) == $iProp) {
         return $oImage;
     }
     /**
      * Вырезаем прямоугольник из центра
      */
     if (round($iWidth / $iHeight, 2) <= $iProp) {
         $iNewWidth = $iWidth;
         $iNewHeight = round($iNewWidth / $iProp);
     } else {
         $iNewHeight = $iHeight;
         $iNewWidth = $iNewHeight * $iProp;
     }
     if ($bCenter) {
         $oImage->crop($iNewWidth, $iNewHeight, ($iWidth - $iNewWidth) / 2, ($iHeight - $iNewHeight) / 2);
     } else {
         $oImage->crop($iNewWidth, $iNewHeight, 0, 0);
     }
     /**
      * Возвращаем объект изображения
      */
     return $oImage;
 }
Ejemplo n.º 5
0
 /**
  * Upload blog avatar on server
  * Make resized images
  *
  * @param  array           $aFile
  * @param  ModuleBlog_EntityBlog $oUser
  * @return (string|bool)
  */
 public function UploadBlogAvatar($aFile, $oBlog)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $sPath = $this->Image_GetIdDir($oBlog->getOwnerId());
     $aParams = $this->Image_BuildParams('avatar');
     $oImage = new LiveImage($sFileTmp);
     /**
      * Если объект изображения не создан, 
      * возвращаем ошибку
      */
     if ($sError = $oImage->get_last_error()) {
         // Вывод сообщения об ошибки, произошедшей при создании объекта изображения
         // $this->Message_AddError($sError,$this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     /**
      * Срезаем квадрат
      */
     $oImage = $this->Image_CropSquare($oImage);
     $aSize = Config::Get('module.blog.avatar_size');
     rsort($aSize, SORT_NUMERIC);
     $sSizeBig = array_shift($aSize);
     if ($oImage && ($sFileAvatar = $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}_{$sSizeBig}x{$sSizeBig}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $sSizeBig, $sSizeBig, false, $aParams, $oImage))) {
         foreach ($aSize as $iSize) {
             if ($iSize == 0) {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), null, null, false, $aParams, $oImage);
             } else {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}_{$iSize}x{$iSize}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $iSize, $iSize, false, $aParams, $oImage);
             }
         }
         @unlink($sFileTmp);
         /**
          * Если все нормально, возвращаем расширение загруженного аватара
          */
         return $this->Image_GetWebPath($sFileAvatar);
     }
     @unlink($sFileTmp);
     /**
      * В случае ошибки, возвращаем false
      */
     return false;
 }