大家好,我的英语不是很好,但我尽量解释清楚我自己。
我得到了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->_imageNewName
在createThumbs
的每次调用中不是唯一的,因此您只是一遍又一遍地覆盖相同的图像。在你的createThumbs
方法中添加一些逻辑,为名称添加唯一性,这样你每次都会得到一个新的图像文件。
示例实现可以是…
$this->_myNewThumbName .= sprintf("%s_%dx%d_thumb", $this->_imageNewName, $this->_imageWidth, $this->imageHeight);
输出:MyCoolSourceImage_400x300_thumb.png