Newsgroup: it.comp.www.php
Titolo: Problema con la creazione di thumbnail

Ciao a tutti,
ho un problema con la creazione di thumbnail per il quale non sono riuscito
a trovare soluzioni.
Vi spiego come funziona: il file download.php legge la lista delle immagini
dalla directory, quindi per ognuno di questi file richiede un thumbnail.
Per far questo fa una chiamata GET ricorsiva, del tipo <img
SRC="download.php?thumb=immagine.jpg">.
Essendo tutte immagini JPEG ho utilizzato imagecreatefromjpeg() per la
sorgente e imagecreatetruecolor() per la destinazione (ho optato per
"truecolor" dato che altrimenti avrei avuto il noto problema dell'immagine
vuota/nera).
In più, se può servire quest'informazione, anziché rimpicciolire
semplicemente l'immagine, ho pensato di ritagliare un quadrato al centro,
di dimensioni inferiori, e rimpicciolire solo quella parte (in altre
parole, se l'immagine è di 640x480 il thumbnail verrà preso, ad esempio, da
un quadrato di dimensioni 400x400, in posizione centrale).
Infine imagecopyresampled() si occupa del rimpicciolimento e imagejpeg() si
occupa di inviare i dati al browser. Concettualmente e formalmente non
credo ci siano problemi.
Tuttavia noto (anzi, notano in molti, visto che la pagina è già da tempo
online), che non tutte le immagini sono caricate subito o, se vengono
caricate, continuano a mostrarsi nere. Spesso bisogna forzarne il
caricamento con "Mostra immagine", e nella maggior parte dei casi in questo
modo l'immagine si riesce a vedere.
Secondo voi da cosa potrebbe essere dovuto? Io ho ipotizzato un qualche
problema relativo all'HTTP, forse una specie di timeout (il browser si
aspetta che l'immagine venga caricata in un tot di tempo, mentre a causa
della rielaborazione questo avviene fuori tempo). Tenete conto comunque che
il problema si verifica sia su IE che su Firefox.
Questa è la funzione:
| define("photoTHUMBSIZE", 32);
| define("photoTHUMBRATIO", 0.5);
| 
| function GetThumbnail($Image) {
| 
|     $ThSrc = imagecreatefromjpeg($Image);
|     $ThDst = imagecreatetruecolor(photoTHUMBSIZE, photoTHUMBSIZE);
| 
|     if (imagesx($ThSrc) < imagesy($ThSrc)) {
|         $ThSrcSize = imagesx($ThSrc);
|     } else {
|         $ThSrcSize = imagesy($ThSrc);
|     }
| 
|     $ThSrcSize = $ThSrcSize * photoTHUMBRATIO;
| 
|     // Centra il quadrato.
|     $ThSrcX = round((imagesx($ThSrc) - $ThSrcSize) / 2);
|     $ThSrcY = round((imagesy($ThSrc) - $ThSrcSize) / 2);
| 
|     imagecopyresampled($ThDst, $ThSrc, 0, 0, $ThSrcX, $ThSrcY,
|         photoTHUMBSIZE, photoTHUMBSIZE, $ThSrcSize, $ThSrcSize);
| 
|     imagejpeg($ThDst);
| 
| }
-- 
"Mi ha detto mio cuggino che da
bambino una volta è morto!" (EeLST)
MID$("thelegs#
tahome.cjb.net
", 8, 1) = "@"

 dei casi in questo modo l'immagine si riesce a vedere.
Invece di dover ricalcolare ogni volta la thumbnail fagliela salvare
dopo la prima elaborazione. In fase di visualizzazione poi verifica se
esiste gia' la thumbnail, se c'e' gia' usi quella altrimenti la crei e
la salvi.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 on IBD
Raab | irini su nevro | www.%NickName%.
cjb.net

 collection". :(
IMHO basta che fai uno script che cicla per tutte le thumbnail e se ne
trova una che non ha la relativa immagine la elimina, oppure usi
direttamente uno script per cancellare sia le thumbnail che l'immagine.
