在Joomla 2.5中从上传的图像创建缩略图

时间:2014-01-06 09:08:27

标签: php image joomla resize

我对joomla真的很陌生,我不知道该怎么办才能完成它。我在管理员表中只有这种代码,它指的是上传文件。

                //Support for file field: cover
            if(isset($_FILES['jform']['name']['cover'])):         
                jimport('joomla.filesystem.file');
                jimport('joomla.filesystem.file');
                $file = $_FILES['jform'];

                //Check if the server found any error.
                $fileError = $file['error']['cover'];
                $message = '';
                if($fileError > 0 && $fileError != 4) {
                    switch ($fileError) :
                        case 1:
                            $message = JText::_( 'File size exceeds allowed by the server');
                            break;
                        case 2:
                            $message = JText::_( 'File size exceeds allowed by the html form');
                            break;
                        case 3:
                            $message = JText::_( 'Partial upload error');
                            break;
                    endswitch;
                    if($message != '') :
                        JError::raiseWarning(500,$message);
                        return false;
                    endif;
                }
                else if($fileError == 4){
                    if(isset($array['cover_hidden'])):;
                        $array['cover'] = $array['cover_hidden'];
                    endif;
                }
                else{

                    //Check for filesize
                    $fileSize = $file['size']['cover'];
                    if($fileSize > 10485760):
                        JError::raiseWarning(500, 'File bigger than 10MB' );
                        return false;
                    endif;

                    //Replace any special characters in the filename
                    $filename = explode('.',$file['name']['cover']);
                    $filename[0] = preg_replace("/[^A-Za-z0-9]/i", "-", $filename[0]);


                    //Add Timestamp MD5 to avoid overwriting
                    $filename = md5(time()) . '-' . implode('.',$filename);
                    $uploadPath = JPATH_ADMINISTRATOR.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_comic'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.$filename;
                    $fileTemp = $file['tmp_name']['cover'];

                    if(!JFile::exists($uploadPath)):

                        if (!JFile::upload($fileTemp, $uploadPath)):

                            JError::raiseWarning(500,'Error moving file');

                            return false;

                        endif;

                    endif;
                    $array['cover'] = $filename;
                }

            endif;

我可以从上面的代码上传文件(在这种情况下,图片),但我接下来要做的是为上传的图片创建缩略图。我通过互联网搜索了php代码,但它似乎无法工作,因为我无法将其同步到joomla代码中。嗯..我在images文件夹中创建了一个名为thumbnail的文件夹。那我接下来该怎么办?

如果你们中的任何人能帮助我,我会非常高兴和感激。谢谢。

2 个答案:

答案 0 :(得分:3)

我可以分享我正在使用的技术,我希望它会有所帮助:

在完成所有验证后(在方法结束时,在返回true之前),在表的方法检查中,我添加以下代码:

$input = JFactory::getApplication()->input;
$files = $input->files->get('jform');
if (!is_null($files) && isset($files['image']))
  $this->image = $this->storeImage($files['image']);

我创建了一个名为 storeImage()的新方法:

protected $_thumb = array('max_w' => 200, 'max_h' => 200);

private function storeImage($file) {
  jimport('joomla.filesystem.file');

  $filename = JFile::makeSafe($file['name']);
  $imageSrc = $file['tmp_name'];
  $extension = strtolower(JFile::getExt($filename));
  // You can add custom images path here
  $imagesPath = JPATH_ROOT . '/media/';

  if (in_array($extension, array('jpg', 'jpeg', 'png', 'gif'))) {
    // Generate random filename
    $noExt = rand(1000, 9999) . time() . rand(1000, 9999);
    $newFilename = $noExt . '.' . $extension;
    $imageDest = $imagesPath . $newFilename;

    if (JFile::upload($imageSrc, $imageDest)) {
      // Get image size
      list($w, $h, $type) = GetImageSize($imageDest);

      switch ($extension) {
        case 'jpg':
        case 'jpeg':
          $srcRes = imagecreatefromjpeg($imageDest);
          break;
        case 'png':
          $srcRes = imagecreatefrompng($imageDest);
          break;
        case 'gif':
          $srcRes = imagecreatefromgif($imageDest);
          break;
        }

        // Calculating thumb size
        if($w > $h) {
          $width_ratio = $this->_thumb['max_w'] / $w;
          $new_width   = $this->_thumb['max_w'];
          $new_height  = $h * $width_ratio;
        } else {
          $height_ratio = $this->_thumb['max_w'] / $h;
          $new_width    = $w * $height_ratio;
          $new_height   = $this->_thumb['max_w'];
        }

        $destRes = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($destRes, $srcRes, 0, 0, 0, 0, $new_width, $new_height, $w, $h);

        // Creating resized thumbnail
        switch ($extension) {
          case 'jpg':
          case 'jpeg':
            imagejpeg($destRes, $imagesPath . 'thumb_' . $newFilename, 100);
            break;
          case 'png':
            imagepng($destRes, $imagesPath . 'thumb_' . $newFilename, 1);
            break;
          case 'gif':
            imagegif($destRes, $imagesPath . 'thumb_' . $newFilename, 100);
            break;
          }

          imagedestroy($destRes);

          // Delete old image if it was set before

          if (($this->image != "") && JFile::exists($imagesPath . $this->image)) {
        JFile::delete($imagesPath . $this->image);
            JFile::delete($imagesPath . 'thumb_' . $this->image);
          }
          return $newFilename;
        }
      }
    }
  }
  return null;
}

此方法返回上传的文件filename,该表存储在“image”列中。它创建了两个文件,一个原始图像和调整大小的拇指,文件前缀为“_thumb”。

我希望它有所帮助:)

答案 1 :(得分:2)

我使用了Jimage:https://api.joomla.org/cms-3/classes/JImage.html

$JImage = new JImage($img_path);
$size_thumb = '150x150';
$JImage->createThumbs($size_thumb,1,$path.'/thumb');

简短,简单,高效。