Newsgroup: it.comp.lang.javascript
Titolo: [AutoSize] Funzione Immagini

Ciao a tutti,
ho realizzato una procedura per aprire delle immagini in una nuova finestra
e far si che questa si adatti alle dimensioni delle immagini passate come
parametro.
Il problema è che l'immagine si apre la prima volta rimpicciolita, la
seconda correttamente.
Come posso risolvere il problema?
Grazie
function openImageWindow(sImgFile){
 var newWin;
 var objImg = new Image();
 var sPrm;
 objImg.src = sImgFile;
 sPrm = 'toolbar=no, status=no, height=' + (objImg.height + 25)
    + ', width=' + (objImg.width + 20);
 newWin = window.open(sImgFile, 'imgView', sPrm);
}

 seconda correttamente.
La prima volta si apre rimpicciolita perche' non avendo ancora caricato 
le immaigni non puo' leggerne le dimensioni.
La seconda volta si trova le img in cache e legge le dimensioni 
correttamente.
Io preferisco l'approccio di indicare direttamente alla funzione le 
dimensioni, e' l'unico modo per dire alla finestra quanto grande 
dev'essere PRIMA che venga caricata l'immagine.
Senza contare che puoi comunque avere sempre una dimensione standard per 
la finestra, le immagini piu' grandi le ridimensioni, le piu' piccole le 
allarghi aggiungendoci attorno dello spazio bianco o trasparente.
Cmq se cerchi nei post vecchi (che e' sempre una buona abitudine), mi 
sembra che la scorsa settimana si e' risposto un paio di volte a domande 
del genere.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli il PUNTO e metti un .

 dev'essere PRIMA che venga caricata l'immagine.
Eh sě, anche perché nel caso di un'immagine
bisogna confrontare le sue dimensioni con quelle dello schermo
ed eventualmente togliere/mettere le scrollbars, ridimensionare, ecc...
Farlo prima che l'immagine venga caricata č molto facile,
farlo dopo (su onload) mi sembra decisamente piů laborioso.
MaRoK

 Come insegna il caro vecchio Qpeg per dos... :D
Difatti, ma un qualunque lettore di immagini ha di certo bisogno di 
avere *un immagine* per poter sapere quanto misura in pixel :)
(altrimenti cosa legge? S'inventa una serie di byte messi in croce? ;) )
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 Come insegna il caro vecchio Qpeg per dos... :D
Qpeg... mi ricorda qualcosa, ma non focalizzo... che faceva?


 (altrimenti cosa legge? S'inventa una serie di byte messi in croce? ;) )
Ehehe be', no, intendevo dire che non deve caricare TUTTA l'immagine
per sapere quanto è grande ma solo i primissimi bit di header.
Tanto per fare un esempio,
se fai aprire a Qpeg per dos una directory di mille files senza estensione,
lui in pochi secondi ti dà il listato di tutti i files con formato, dimensioni in pixel
e numero di colori.
Aggiungerei che quel "pochi secondi" è riferito a un 486 con scheda video isa
ma non vorrei infierire contro i programmi windows...
(i lettori più attenti mi faranno notare che la scheda video isa
non c'entra una mazza, però suona bene :))))))
Dunque è un controsenso che un browser di ultima generazione
aspetti di avere caricato tutta l'immagine per sapere quanto è grande...
MaRoK

 anche se non è mai stata caricata prima.
No, aspetta, il sintomo E' di buon funzionamento, e' il tuo codice ad essere
errato.
Con immagini piccole, browser veloce, e prove in locale potrebbe anche
funzionare, ma e' errato.
Impostare la proprieta' src significa forzarne il caricamento e non e' detto
che all'esecuzione della riga di codice successiva questo sia completato
(anzi...). L'approccio sarebbe errato anche se i browser fossero capaci di
leggere l'header dell'immagine.
Il recupero di queste informazioni deve essere sottoposto ad un handler che
ne accerti la disponibilita'.
var pippo = new Image(),
pippo.onload = function(){...}
pippo.onerror = function() {...}
pippo.src = tuoPath;
N.B. : PRIMA imposto gli handler, POI dico di caricare l'immagine.

 N.B. : PRIMA imposto gli handler, POI dico di caricare l'immagine.
Devo provare, probabilmente è una buona idea,
però a occhio non devo cmq aspettare
che tutta l'immagine sia caricata per sapere la sua dimensione
e poi darla in pasto alla popup?
MaRoK

 e poi darla in pasto alla popup?
Certo. Infatti l'apertura della popup dovra' essere subordinata al codice
scritto nell'handler dell'evento onload.

 aspetti di avere caricato tutta l'immagine per sapere quanto è grande...
Leggi su.


 pensata per l'esecuzione locale.
Mmmmm... e tu come fai a supporre che io non volessi creare uno script
da usare solo in locale? :DDDDD
(ok ok non č vero perň... vabbe', 1 a 0 per ZER0! :D)
MaRoK

 Qpeg... mi ricorda qualcosa, ma non focalizzo... che faceva?
Era un simpatico programmino
per la lettura di immagini da dos.
Oltre alla velocità (per quei tempi) molto elevata
con cui apriva le immagini ad alta risoluzione,
la lettura di pratici cataloghi grafici scritti in ascii
e l'elevatissimo numero di formati supportati
(ad esempio le png, allora fantascienza)
era un vero "cercatore" di immagini:
aprendo una directory in pochi secondi
ti aveva già visualizzato di fianco a tutti i nomi dei files
se era un'immagine, il numero di colori, le dimensioni in pixel e il formato,
indipendentemente dall'estensione: leggeva solo l'header.
Se riporti questa proprietà ad un contesto di cazzeggio totale,
l'inevitabile conseguenza non può che essere la scansione dell'hd,
la dissepoltura di immagini "nascoste" nei vecchi giochini dos
(che allora non usavano ancora i sistemi di compressione,
tipicamente erano iff amiga o pcx rinominate in .dat)
ed il loro editing selvaggio, ottenendo come risultato
all'interno di ogni gioco delle sane videate personalizzate! :D
(beata gioventù... :)))
Forse da qualche parte con google salterà ancora fuori,
ma non so se e come funge da windows...
MaRoK

 scritto nell'handler dell'evento onload.
Ah ok, allora ci siamo.
Boh, tra tutti m'avete convinto,
continuo a passare i parametri (altezza,larghezza) alla funzione
e vivo tranquillo! :D
MaRoK

 e vivo tranquillo! :D
Guarda, IMHO e' l'unica soluzione sicura, e di certo non dara' problemi 
con l'aggiornamento dei browser... un mal di testa in meno :-))
Considera quel che ti suggerivo nel primo reply, cioe' standardizzare la 
dimensione in modo da aprire la finestra sempre uguale


 (ok ok non č vero perň... vabbe', 1 a 0 per ZER0! :D)
:P


 dimensione in modo da aprire la finestra sempre uguale
Be', non esageriamo adesso,
basta passare le dimensioni dell'immagine come parametro! :D
MaRoK

 con popup di dimensione esatta. Bastava fare un semplice rapporto.
Non male.
Ti potrebbe creare casino qualche utente
che clicca sullo spazio della thumbnail
prima che la thumbnail sia visualizzata.
Ma in fondo se la sarebbe andata un po' a cercare... :D
(forse richiamando la thumbnail con width e height te la cavi... boh)
Alla prossima!
MaRoK

, 
alex....@leeberaw.it
 says...

Si, ma sara' una bella rottura di scatole quando dovrai aggiornare :-)


 Si, ma sara' una bella rottura di scatole quando dovrai aggiornare :-)
Ah, ho capito cosa vuoi dire,
io uso lo script per un semplice album fotografico
e le pagine, una volta scritte, non vanno più aggiornate
se non per aggiungere/togliere foto agli indici già esistenti.
Siccome le foto non vengono modificate,
i parametri possono fossilizzarsi tranquillamente.
Concordo che, dovendo invece gestire ad es. un catalogo di novità
in cui le immagini vengono quotidianamente modificate e aggiornate,
è di gran lunga più comodo usare una dimensione fissa.
MaRoK

 (forse richiamando la thumbnail con width e height te la cavi... boh)
Esatto. ;)
