用一种方法创建多个图像


create several images with one method

大家好,我的英语不是很好,但我尽量解释清楚我自己。

我得到了Uploader类和方法来创建不同尺寸的图像。

问题是,当我调用方法几次它总是创建一个图像用上一种方法的尺寸。我不明白我做错了什么。

谢谢你的帮助。

我像这样调用我的方法:

$img->uploadMainImage();
$img->createThumbs()->createThumbs(300, 400)->createThumbs(600, 600);

方法如下:上传主图片到temp:

public function uploadMainImage()
{
    if ($this->_imageError == 0) {
        $this->checkImageSize();
        $this->checkImageExtention();
        $this->checkImageDimensions();
        if(empty($this->_errorCollector)) {
            $this->changeImageName()->moveUploadedImage();
        }
    }
    return $this;
}
创建拇指的方法:
public function createThumbs($width = null , $height = null, $folder = null)
{
      if (!is_null($width) && !is_null($height)) {
          $this->_thumbsWidth  = $width;
          $this->_thumbsHeight = $height;
      }

      if ($this->_imageHeight > $this->_imageWidth) {
          $this->_thumbsWidth = ($this->_imageWidth / $this->_imageHeight) * $this->_thumbsHeight;
      } else {
          $this->_thumbsHeight = ($this->_imageHeight / $this->_imageWidth) * $this->_thumbsWidth;
      }
      $tmpImg = imagecreatetruecolor($this->_thumbsWidth, $this->_thumbsHeight);
      switch ($this->_imageType) {
          case "image/jpeg":
          case "image/jpg":

              $src = imagecreatefromjpeg($this->_destinationFolder['main'] .  $this->_imageNewName);
              imagecopyresampled($tmpImg, $src, 0, 0, 0 ,0, $this->_thumbsWidth, $this->_thumbsHeight, $this->_imageWidth, $this->_imageHeight);
              imagejpeg($tmpImg, $this->_destinationFolder['thumbs'] .  $this->_imageNewName, 100);
              imagedestroy($src);
              break;
          case "image/png":
              $src = imagecreatefrompng($this->_destinationFolder['main'] .  $this->_imageNewName);
              imagecopyresampled($tmpImg, $src, 0, 0, 0 ,0, $this->_thumbsWidth, $this->_thumbsHeight, $this->_imageWidth, $this->_imageHeight);
              imagepng($tmpImg, $this->_destinationFolder['thumbs'] .  $this->_imageNewName, 24);
              imagedestroy($src);
              break;
      }
    return $this;
}

$this->_imageNewNamecreateThumbs的每次调用中不是唯一的,因此您只是一遍又一遍地覆盖相同的图像。在你的createThumbs方法中添加一些逻辑,为名称添加唯一性,这样你每次都会得到一个新的图像文件。

示例实现可以是…

$this->_myNewThumbName .= sprintf("%s_%dx%d_thumb", $this->_imageNewName, $this->_imageWidth, $this->imageHeight);

输出:MyCoolSourceImage_400x300_thumb.png