There may be another good way to create and get the thumb image in Yii, here is my method to do it.
-
You have to install this extension, “phpthumb”, please search this extension in this website.
-
Create a file named "ImageThumb.php", and locate it in protected/components , and insert the code as below:
<?php
/**
*/
class ImageThumb extends CApplicationComponent
{
private $originalPath = "/upload/products/";
private $thumbPath = "/upload/thumbs";
public function createThumb($modelImage, $site="", $resizeW=100, $resizeH=100)
{
$oldImage = $modelImage;
$modelImage = $this->_thumbName($modelImage, $site);
$oldImageResite = $modelImage;
if(!file_exists(Yii::getPathOfAlias("webroot").$this->originalPath.$oldImage))
{
$modelImage = "thumb.jpg";//You shall have a thumb.jpg image exists in path of $this->originalPath
$oldImage = $modelImage;
$modelImage = $this->_thumbName($modelImage, $site);
$oldImageResite = $modelImage;
}
Yii::app()->thumb->setThumbsDirectory($this->thumbPath);
if(!file_exists(Yii::getPathOfAlias("webroot").$this->thumbPath.$oldImageResite))
{
Yii::app()->thumb
->load(Yii::getPathOfAlias("webroot").$this->originalPath.$oldImage)
->resize($resizeW, $resizeH)
->save($modelImage, "JPG", "JPG");
}
return $modelImage;
}
private function _thumbName($modelImage, $site)
{
if(!empty($site))
{
$tem = explode(".", $modelImage);
if(count($tem) > 1)
$modelImage = $tem[0]."_".$site.".".$tem[1];//the file name starts with "m_", "s_", or null;
}
return $modelImage;
}
}
- Demo
Yii::import("application.components.ImageThumb");
$imageThumb = new ImageThumb();
$imageOne = $imageThumb->createThumb("example.jpg", "", 580, 280);
$imageTwo = $imageThumb->createThumb("example2.jpg", "s", 100, 70);
Have fun with Yii.