techsoft
(Daniele Waser)
June 11, 2014, 8:45am
1
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!!
ettolo
(Nicola)
June 11, 2014, 9:40am
2
techsoft:
[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!
techsoft
(Daniele Waser)
June 11, 2014, 11:04am
3
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:
ettolo
(Nicola)
June 11, 2014, 1:14pm
4
beh scusa se ho provato ad aiutarti
ci riprovo…
credo che tu sbagli il modo di richiamare l’oggetto immagine.
guarda qui… nel caso tu non ci fossi arrivato da solo!
http://www.yiiframework.com/forum/index.php/topic/7030-upload-verot/
techsoft
(Daniele Waser)
June 11, 2014, 1:38pm
5
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();
ettolo
(Nicola)
June 11, 2014, 2:09pm
6
$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.
techsoft
(Daniele Waser)
June 12, 2014, 7:53am
7
ettolo:
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!
lestat1968
(Baldoromano1968)
June 12, 2014, 9:01am
8
techsoft:
'import' => array(
'application.models.*',
'application.components.*',
'application.extensions.abeautifulsite.SimpleImage',
),
se la libreria si trova in ‘extensions.abeautifulsite.SimpleImage’, prova a inserire in ‘import’:
'ext.abeautifulsite.SimpleImage.*',
techsoft
(Daniele Waser)
June 12, 2014, 9:24am
9
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
ettolo
(Nicola)
June 12, 2014, 9:58am
10
Puoi scrivere il percorso esatto in cui si trova la classe simpleimage?
lestat1968
(Baldoromano1968)
June 12, 2014, 10:07am
11
lestat1968
(Baldoromano1968)
June 12, 2014, 11:10am
13
prova con ‘ext.abeautifulsite.*’ allora… dovrebbe funzionare.
credevo che si trovasse in protected/extensions/abeautifulsite/SimpleImage/SimpleImage.php
lestat1968
(Baldoromano1968)
June 12, 2014, 11:23am
14
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.
techsoft
(Daniele Waser)
June 12, 2014, 12:39pm
15
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!!
lestat1968
(Baldoromano1968)
June 12, 2014, 1:01pm
16
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/
techsoft
(Daniele Waser)
June 12, 2014, 1:05pm
17
Infatti non ci avevo fatto caso nemmeno io, sono entrato per sbaglio…