2015-12-20 7 views
0

Я использую расширение изображения для изменения изображения, но они не изменяются в соответствии с параметрами, которые я дал. Вот мой код. Есть ли в моем коде какая-либо ошибка или что. Изображения, размер которых равен размеру «800 * 533» , но не соответствует 800 * 600.Yii: Почему изображения не изменяются правильно?

public function actionCreate() 
    { 
     $model=new Business; 

      // Uncomment the following line if AJAX validation is needed 
      // $this->performAjaxValidation($model); 

      if(isset($_POST['Business'])) 
      { 
         $rnd = rand(0, 9999); // generate random number between 0-9999 

       $model->attributes = $_POST['Business']; 

       $uploadedFile = CUploadedFile::getInstance($model, 'image'); 
       $fileName = "{$rnd}-{$uploadedFile}"; // random number + file name 
       $model->image = $fileName; 


       if ($model->save()) { 
        if(!empty($uploadedFile)) // check if uploaded file is set or not 
       { 
        //$uploadedFile->saveAs(Yii::getPathOfAlias('webroot')."/img".$filename); 
        $uploadedFile->saveAs(Yii::app()->basePath . '/../img/' . $fileName); 
        $image = Yii::app()->image->load(Yii::app()->basePath . '/../img/' . $fileName); 
        $image->resize(800, 600); 
        $image->save(Yii::app()->basePath . '/../img/' . $fileName); 
        } 

        $this->redirect(array('view', 'id' => $model->id)); 
       } 
      } 

      $this->render('create', array(
       'model' => $model, 
      )); 
     } 
+0

изменение $ image-> размер (800, 600); до $ image-> размер (800, 600, изображение :: NONE); –

ответ

0

Сначала советую. Не хранить не изменения размера изображения вы можете использовать tempName свойство CUploadedFile

$image = Yii::app()->image->load($uploadedFile->tempName); 
        $image->resize(800, 600); 
        $image->save(Yii::app()->basePath . '/../img/' . $fileName); 

О изменении размера я думаю, вы должны рассчитать размер изображения с измененным размером. Вот мой код

protected static function getImgBox($img,$width,$height,$bySide,$boxType){ 
     $img_width=$img->getSize()->getWidth(); 
     $img_height=$img->getSize()->getHeight(); 
     $newWidth =0; 
     $newHeight=0; 

     switch($boxType){ 
      case self::BOX_TYPE_FILL: 
      { 
       $newWidth=$width; 
       $newHeight=$height; 
      } 
       break; 
      case self::BOX_TYPE_WO:{ 

       if($bySide==self::BY_SIDE_WIDTH) { 

        $newWidth = $width; 
        $newHeight = $img_height * $newWidth/$img_width; 
       } 

       if($bySide==self::BY_SIDE_HEIGHT){ 
        $newHeight=$height; 
        $newWidth = $img_width*$newHeight/$img_height; 
       } 


      } 
       break; 

      case self::BOX_TYPE_INSIDE:{ 

       $newWidth = $width; 
       $newHeight = $img_height * $newWidth/$img_width; 

       if($newHeight>=$height){ 
        $newHeight=$height; 
        $newWidth = $img_width*$newHeight/$img_height; 
       } 

      } 

     } 


     if($newHeight!=0 && $newWidth!=0){ 
      return new Box(ceil($newWidth),ceil($newHeight)); 

     } 
     else 
      return null; 

    } 

Я не знаю, расширение ведьм вы используете. Я использую Imagine Extension for Yii 2

0
$imgpathlogo = App::param("upload_path").'outletlogo'. DIRECTORY_SEPARATOR; 
       $imgpathlogothumb100 = App::param("upload_path")."outletlogo". DIRECTORY_SEPARATOR."thumb100". DIRECTORY_SEPARATOR; 
       $imgpathlogothumb200 = App::param("upload_path")."outletlogo". DIRECTORY_SEPARATOR."thumb200". DIRECTORY_SEPARATOR; 
///////////////////Chek Outlet New Logo Images//////////////// 
           if ($_FILES['OutletMaster']['name']['outlet_logo'] != "") { 
            $imagelogo=$files['OutletMaster']['name']['outlet_logo']; 
            $logofilename=explode(".", $imagelogo); 
            $logofileext = $logofilename[count($logofilename) - 1]; 
            $newlogofilename = uniqid(). "." . $logofileext; 
            $model->outlet_logo = $newlogofilename; 
            move_uploaded_file($_FILES['OutletMaster']['tmp_name']['outlet_logo'],$imgpathlogo.$newlogofilename); 

            //////////////////Creating Thumbnail For Outlet Logo/////////////////////////// 
            $ext = explode(".", strtolower($newlogofilename))[1]; 
            $src = $imgpathlogo.$newlogofilename; 
            if ($ext == 'gif') 
             $resource = imagecreatefromgif($src); 
            else if ($ext == 'png') 
             $resource = imagecreatefrompng($src); 
            else if ($ext == 'PNG') 
             $resource = imagecreatefrompng($src); 
            else if ($ext == 'jpg' || $ext == 'jpeg') 
             $resource = imagecreatefromjpeg($src); 
            $width = imagesx($resource); 
            $height = imagesy($resource); 

            $thumbWidth100 = 100; 
            $desired_width100 = $thumbWidth100; 
            $desired_height100 = floor($height * ($thumbWidth100/$width)); 
            $virtual_image = imagecreatetruecolor($desired_width100,$desired_height100); 
            imagecopyresized($virtual_image,$resource,0,0,0,0,$desired_width100,$desired_height100,$width,$height); 
            imagejpeg($virtual_image, "{$imgpathlogothumb100}{$newlogofilename}"); 

            $thumbWidth200 = 200; 
            $desired_width200 = $thumbWidth200; 
            $desired_height200 = floor($height * ($thumbWidth200/$width)); 
            $virtual_image = imagecreatetruecolor($desired_width200,$desired_height200); 
            imagecopyresized($virtual_image,$resource,0,0,0,0,$desired_width200,$desired_height200,$width,$height); 
            imagejpeg($virtual_image, "{$imgpathlogothumb200}{$newlogofilename}"); 
           } 
+0

Я хочу сделать это с расширением –

+0

Расширение не даст вам изображения exect, которое даст ошибку около 5 пикселей –

 Смежные вопросы

  • Нет связанных вопросов^_^