[Risolto][Yii 1] Immagini Auto-Ridimensionate

Salve,

chiedo il vostro aiuto per un problema che non riesco a risolvere; ho creato un sito web per l’amministrazione di locazioni(un sito per un’immobiliare), mi sono però bloccato sul ridimensionamento delle immagini, ora le stampo ridimensionandole in automatico come segue:


echo CHtml::image(Yii::app()->createUrl('img/displaySavedImage', 

  array('id' => $newLoc[$m]['img_id'])), 'alt', array( 'height'=>'95px', 'width'=>'115px'));

In questo modo le immagini vengono ridimensionate automaticamente, tuttavia le proporzioni sono sballate… ho trovato un sistema(Verot) che mi permette di ridimensionare le immagini e mantenere le proporzioni inserendo degli spazi vuoti, siccome ho già creato il sistema di upload e stampa immagini non ho voglia di rifare tutto quindi non so come usare questa classe.

[b]Arriviamo al dunque, come faccio a ridimensionare un immagine, passandogli altezza e larghezza, mantenendo le proporzioni, inserendo degli spazi vuoti ai lati?

Posso usare un’alternativa alla funzione


image_ratio_fill=true

di verot, oppure come posso integrarla in un sistema di upload già fatto?[/b]

Grazie mille a chi saprà aiutarmi!!

ciao,

seguendo il tuo link e guardando gli esempi pare che quello che ti serve sia:

$foo->image_resize = true;

$foo->image_ratio_fill = true;

$foo->image_y = 50;

$foo->image_x = 150;

Personalmente ho usato in altro progetto (ma non con yii) questa classe

http://www.abeautifulsite.net/blog/2011/11/the-simple-image-class-for-php/

Ciao!

Ok, fino a li c’ero arrivato, il problema é che non so come integrarlo nel mio codice…

Adesso ho provato a modificare il codice così


Yii::import('application.extensions.upload.upload');


$prova= CHtml::image(Yii::app()->createUrl('img/displaySavedImage', array('id' => $oCDbDataReader[0]['img_id'])));

                $prova->image_resize = true;

                $prova->image_ratio_fill = true;

                $prova->image_y = 50;

                $prova->image_x = 150;

echo $prova;

ma, giustamente, mi da questo errore:

beh scusa se ho provato ad aiutarti :blink:

ci riprovo…

credo che tu sbagli il modo di richiamare l’oggetto immagine.

guarda qui… nel caso tu non ci fossi arrivato da solo! ;D

http://www.yiiframework.com/forum/index.php/topic/7030-upload-verot/

Scusa, non era era mia intenzione essere scortese…

Ho provato a seguire la guida che mi hai citato, nulla di fatto; non riesco a stampare l’immagine, hai qualche esempio o qualche dritta da mostrarmi?

questo il mio codice:




$prova= CHtml::image(Yii::app()->createUrl('img/displaySavedImage', array('id' => $oCDbDataReader[0]['img_id'])));

                $upload = new upload($prova);

                $upload->image_resize = true;

                $upload->image_ratio_fill = true;

                $upload->image_y = 50;

                $upload->image_x = 150;

                $upload->file_is_image;

                $upload->file_dst_pathname;

                header('Content-type: ' . $upload->file_src_mime);

                echo $upload->Process();

                die();




$prova= CHtml::image(Yii::app()->createUrl('img/displaySavedImage', array('id' => $oCDbDataReader[0]['img_id'])));

questo è sbagliato, genera un tag html img e mostra l’immagine.

La tua cluasse upload vuole solo il percorso

Devi fare una cosa tipo:


 

$prova= "/cartellaImmagini/nomeImmagine.jpg";


$upload = new upload($prova);

$upload->image_resize = true;

$upload->image_ratio_fill = true;

$upload->image_y = 50;

$upload->image_x = 150;

$upload->file_is_image;

$upload->file_dst_pathname;

$upload->process("/cartellaImmagini/ridimensionata.jpg"); // questo salva l'immagine 



poi visualizzi l’immagine “ridimensionata.jpg” dove vuoi.

Tutto questo se vuoi fare il ridimensionamento al momento dell’upload dell’immagine.

Se vuoi farlo “real time” al momento della visualizzazione ti conviene usare l’altra classe che ti ho indicato (o una equivalente) e lasciare l’upload come l’hai fatto se funziona.

Ok grazie, ho provato ad utilizzare la tua classe. Ho scaricato la classe e inserita nelle estensioni, dopodiche ho configurato il main nel seguente modo:


'import' => array(

        'application.models.*',

        'application.components.*',

        'application.extensions.abeautifulsite.SimpleImage',

    ),

ho poi inserito il codice nella view:


$prova= Yii::app()->createUrl('img/displaySavedImage', array('id' => $oCDbDataReader[0]['img_id']));

$img = new SimpleImage($prova);

$img->best_fit(555, 300);

echo CHtml::image($img);

eppure mi da ancora un errore, non riesco a capire per quale motivo…

Grazie mille per il tuo aiuto!

se la libreria si trova in ‘extensions.abeautifulsite.SimpleImage’, prova a inserire in ‘import’:




         'ext.abeautifulsite.SimpleImage.*',



Grazie, ho provato ma mi da errore.

Comunque il file che contiene la classe é SimpleImage.php quindi non credo sia corretto aggiungere * …in ogni caso grazie

Puoi scrivere il percorso esatto in cui si trova la classe simpleimage?

Dai un’occhiata a:

http://www.yiiframework.com/doc/guide/1.1/en/extension.integration

http://www.yiiframework.com/forum/index.php/topic/13883-classmap-import-classes-from-3rd-party/

-application

->protected

–>extensions

—>abeautifulsite

---->SimpleImage.php

prova con ‘ext.abeautifulsite.*’ allora… dovrebbe funzionare.

credevo che si trovasse in protected/extensions/abeautifulsite/SimpleImage/SimpleImage.php

hai detto che hai come errore


Fatal error: Class 'SimpleImage' not found in C:\xampp\htdocs\techsoft\mpamm\protected\views\site\index.php on line 73

significa che l’autoloader di Yii non riesce a caricare la classe SimpleImage…

a questo punto, visto che la classe è compusta da un solo file, sposterei il file SimpleImage.php nella cartella components e toglierei il riferimento alla cartella abeautifulsite dagli import.

L’autoloader di Yii dovrebbe fare il resto.

Se non funziona fai un ble require_once del file.

Se anche così non funziona dai un’occhiata al link (http://www.yiiframework.com/forum/index.php/topic/13883-classmap-import-classes-from-3rd-party/) che ti avevo suggerito prima.

mi raccomando all’interno della cartella components senza sotto cartelle.

Ok, ho finalmente risolto, grazie a voi!

Alla fine ho dovuto modificare anche il file SimpleImage.php togliendo


namespace abeautifulsite;

use Exception;

Grazie mille per l’aiuto!!

Mi dispiace, non avevo visto la libreria usava i namespace…

in questo caso si poteva risolvere anche così…

http://shiki.me/blog/autoloading-namespaced-libraries-in-yii-framework/

Infatti non ci avevo fatto caso nemmeno io, sono entrato per sbaglio…

ottimo!