2016-03-15 14 views
5

Io uso la funzione muggito per ridimensionare le immagini dopo il caricamento da mostrare sul mio post. ma funziona solo per immagini più grandi di 500px 300px. quando carico un'immagine più piccola di questa dimensione, la riga delle immagini del mio sito web si rompe.Come ridimensionare l'immagine immaginando l'estensione in yii2

use yii\imagine\Image;  
public function upload() { 
      $this->pictureFile->saveAs('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 

      Image::thumbnail('../files/upload/' . $this->pictureFile, 500, 300) 
        ->save('../files/upload/thumbnail-500x300/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension, 
          ['quality' => 70]); 
      unlink('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 
     } 
+0

provare a dare proprietà modalità per la miniatura. 'Image :: thumbnail ('../ files/upload /'. $ This-> pictureFile, 500, 300, \ Imagine \ Image \ ManipulatorInterface :: THUMBNAIL_INSET)' –

+0

questo codice non funziona per immagini inferiori a 500px 300px , –

+0

come posso ridimensionare le immagini piccole a 500px 300px? –

risposta

1

metodo Usa ridimensionamento, come di seguito

use yii\imagine\Image; 
use Imagine\Image\Box; 

public function upload() { 
     $this->pictureFile->saveAs('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 

     Image::thumbnail('../files/upload/' . $this->pictureFile, 500, 300) 
       ->resize(new Box(500,300)) 
       ->save('../files/upload/thumbnail-500x300/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension, 
         ['quality' => 70]); 
     unlink('../files/upload/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension); 
    } 
+0

grazie mille. è stato molto utile –

+0

potresti per favore votare potrebbe essere una domanda? Sono un divieto di domande :-( –

4

Invece di Image::thumbnail, provare le seguenti

$imagine = Image::getImagine(); 
$image = $imagine->open('../files/upload/' . $this->pictureFile); 
$image->resize(new Box(500, 300))->save('../files/upload/thumbnail-500x300/' . $this->pictureFile->baseName . '.' . $this->pictureFile->extension, ['quality' => 70]); 

non ho ancora testato, ma dal momento che Yii di Image è solo un wrapper sopra Imagine biblioteca, questo dovrebbe funzionare con lievi modifiche (se non del tutto necessario) .

E sì, è necessario use Imagine\Image\Box; nel file prima di utilizzare il codice sopra.

1
Yii::setAlias('newsfolder', dirname(dirname(__DIR__)) . '/frontend/web/extraimages/'); 

    $model->img = UploadedFile::getInstance($model,'img'); 
    if (!empty($model->img)){ 
     $model->img->saveAs(Yii::getAlias('@newsfolder/').$filename.'.'.$model->img->extension); 
     $model->img = $filename.'.'.$model->img->extension; 
     $imagine = Image::getImagine(); 
     $image = $imagine->open(Yii::getAlias('@newsfolder/'.$model->img)); 
     $image->resize(new Box(500, 300))->save(Yii::getAlias('@newsfolder/'.$model->img, ['quality' => 70])); 
    } 
0
$imagine = Image::getImagine(); 
     $imagine = $imagine->open($openPath); 
     $sizes = getimagesize ($openPath); 
     /*     
      [0] => 604 
      [1] => 244 
      [2] => 3 
      [3] => width="604" height="244" 
      [bits] => 8 
      [mime] => image/png 
     ) */ 
     $width = 200; 
     $height = round($sizes[1]*$width/$sizes[0]);   
     $imagine = $imagine->resize(new Box($width, $height))->save($savePath, ['quality' => 60]);