I miei utenti dovrebbero poter caricare diverse foto (che possono avere svariegate dimensioni)
Prendiamo ad esempio la foto del profilo che potrebbe essere caricata 500x500.
Nel profilo dell’utente lo spazio è 150x150
Il mio sistema ha una tabella nel db "photo" dove memorizzo il nome del file e la path di dove viene archiviato.
Quando devo mostrare il profilo del mio utente (quindi anche la foto) vorrei che la vedesse 150x150 ma poi cliccando appaia tipo un popup della foto originale (proprio come fa facebook)
Ed ecco la domanda :
Mi conviene memorizzare già 2 record nel db (collegati) dove in uno metto la foto originale e nell’altra già la versione opportunamente resizata, oppure cerco un tool che data un’immagine, carica la thumbnail e gestisce tutto da solo il click con la popup originale?
Ci sono differenze di performance? Me lo chiedo perchè mi pare di aver capito, studiando le api di facebook, che lui opti per memorizzare 2 record distinti, e mi domandavo quale fosse la strada giusta.
Io di solito metto nell’url dell’immagine l’indirizzo di uno script php a cui passo come parametri anche l’altezza e la larghezza desiderati.
Es. /immagine.php?id=23123&w=150
così con l’id mi vado a pescare l’immagine e con w so che larghezza viene richiesta.
Per restituire l’immagine hai 2 soluzioni:
Fai un resize runtime (con gd o imagemagick, meglio la seconda);
Fai una cache dei files, chessò 23123_w150.jpg, così che la seconda volta restituisci l’immagine già salvata come cache piuttosto che rielaborarla nuovamente (però ti occupa spazio su disco);
Considera che se manipoli .htaccess, puoi anche passare i parametri nell’immagine, che viene gestito da .htaccess con una chiamata ad uno script php, es:
/imm.jpg?w=150
e nell’.htaccess puoi mettere un’espressione regolare che se c’è il parametro w o h allora passi il nome dell’immagine allo script immagine.php (per esempio).
Aggiungo alla risposta di Fabrizio che, se devi usare l’action in parecchi punti, allora o crei una classe CAction oppure usi un componente.
Yii 1 da questo punto di vista è molto flessibile, ed il codice funziona comunque (e tra l’altro, se un giorno cambi idea non ci metti molto a trasformare una CAction in un component o viceversa, anche se richiede un buon editor che faccia una eccellente e fine ricerca nel contenuto dei file del tuo intero progetto, vedi Sublime Text 3 )