2012-03-12 13 views
8

Ho un sito Web mobile che sfrutta jQuery Mobile, tuttavia le immagini, francamente, sembrano schifo su iPhone 4/4S. Presumo che lo stesso andrà per il "nuovo iPad" quando sarà disponibile entro questa settimana.Qual è il modo corretto di gestire le immagini Web ad alta risoluzione per i display ad alta risoluzione (principalmente display retina iOS)?

So che questo ha qualcosa a che fare con il rapporto pixel e/o DPI dell'immagine (o PPI o qualsiasi altra cosa si voglia chiamare ... non entriamo in una discussione al riguardo). Voglio semplicemente sapere qual è il metodo migliore per offrire immagini web ad alta risoluzione per questi display retina iOS.

In un primo momento, ho pensato che la modifica dell'immagine DPI (in Photoshop) avrebbe risolto il problema. Ho scattato alcune immagini di esempio e ridimensionato a una larghezza di 190 px. Ho salvato un'immagine a 72 DPI e l'altra a 200 DPI. Questo non ha avuto alcun effetto. Guarda tu stesso (su un iPhone 4/4S): http://haxway.com/restest/1.html L'immagine in basso di ciascuno è quella da 200 DPI.

Quindi, invece di salvare l'immagine ad alta risoluzione a 200 DPI, l'ho salvato nuovamente a 72 DPI, ma questa volta ho aumentato la larghezza (a 528 px) in modo che quando ridimensionato a una larghezza di 190 px sarebbe a ~ 200 DPI. Questo sembrava fare il trucco: http://haxway.com/restest/2.html Se si visualizza il codice sorgente, è possibile vedere che sto forzando una larghezza/altezza sui tag immagine (<img src="w4.jpg" alt="" width="190" height="143">).

Tuttavia, non sono convinto che questa sia la soluzione migliore. Non utilizzare gli attributi width/height per ridimensionare un'immagine influisce sulle prestazioni di rendering in quanto il dispositivo deve ridimensionare l'immagine piuttosto che caricarla (e non toccarla ulteriormente)?

Dopo alcune ricerche, sembra che ci siano alcune query multimediali CSS come -webkit-min-device-pixel-ratio [1] in cui è possibile utilizzare diversi CSS per i display ad alta risoluzione e quindi caricare immagini ad alta risoluzione nel CSS. Ma ho bisogno di indirizzare i tag HTML <img>. Un altro articolo che ho letto (mi dispiace aver perso il link) suggerisce di usare Javascript per scambiare le immagini "normali" con quelle ad alta risoluzione. Sembra pazzesco!

C'è un modo migliore di andare su questo? Mi rendo conto che le opinioni possono differire su quale sia il modo "migliore". Se i pro/contro di ciascun metodo potrebbero essere spiegati, sarebbe fantastico! Il mio obiettivo è quello di utilizzare qualsiasi metodo per renderizzare il più veloce (si spera che non si utilizzi un javascript hacky, ecc.).

Grazie!

[1] http://aralbalkan.com/3331

+0

Il tuo campione è un po 'strano. Quello che fanno i browser, è mostrare le immagini pixel per pixel. Visto così, le tue immagini sono simili. I formati di stampa delle immagini a 200 dpi sono appena più piccoli. Se invece dovessi caricare la stessa immagine con una risoluzione maggiore - contenente più pixel - vedresti i browser mostrare le immagini 3 volte più grandi. Anche questo non è ciò che vuoi. – commonpike

+0

... esattamente. Non è quello che voglio. Quindi, come questo approccio attuale è "pescoso"? (Non intendo attaccare ... solo curioso.) –

+0

scusa se questo suonava offensivo. Mi confondeva: quello che vuoi, presumo, è la stessa dimensione dell'immagine con una risoluzione più alta. Ma hai caricato invece un'immagine più piccola con una risoluzione più alta. Se i browser * rispetteranno * il dpi, le immagini da 200 dpi che hai caricato saranno molto più piccole. (in entrambi i casi, grazie per le immagini di prova - mi hai aiutato). – commonpike

risposta

1

Sarà necessario eseguire una qualche forma di js come la soluzione. Quello in cui si sceglie di utilizzare al momento è uno di wilcox mat. Servirà l'immagine giusta sullo schermo. Il grande vantaggio di questa soluzione è che memorizza nella cache le immagini per ridurre il carico sugli utenti.

http://adaptive-images.com/

C'è una spinta per portare in un nuovo elemento di immagine HTML che può richiedere diversi fonte per superare questo problema, ma è un modo fuori ancora.

http://www.w3.org/community/respimg/

+1

In che modo è vantaggioso offrire sempre un'immagine ad alta risoluzione con gli attributi 'width' e' height' impostati nel tag '' (come nel mio secondo esempio)? Un dispositivo che non ha uno schermo "ad alta risoluzione" mostrerebbe comunque l'immagine bene. Capisco che conserverà la larghezza di banda, ma qualcos'altro? Mi sento come se una soluzione Javascript fosse più lenta in quanto sarebbe probabilmente eseguita dopo che il documento è pronto, ecc. Il caching non dovrebbe essere un problema in quanto posso sempre impostare l'intestazione Expires in modo appropriato. Non intendo attaccare questa soluzione, voglio solo sapere tutti i costi/benefici. Grazie! –

0

Per i tag di immagine, penso che hai già dato la propria soluzione. Il grande vantaggio è, inviare una e la stessa immagine per tutti i clienti.

Per le immagini css, non puoi fare lo stesso? Dimentica il goffo -webkit-min-device-pixel-ratio che richiederà un'immagine diversa ogni volta che cucinano un nuovo dispositivo. Invia semplicemente l'immagine più grande e usa lo background-size di CSS3 per ridimensionarlo. Non ho provato questo. IE < 9 ti darà un problema.

Sono, probabilmente come te, stordito html/css non fornisce un metodo corretto per farlo ancora, solo soluzioni alternative hacky. Sono anche, come te, confuso su perché il i browser non aderiscono alle informazioni DPI delle immagini. Se qualcuno lo sa, i commenti sono apprezzati.

C'è un modo migliore di fare questo?

Sì, evitare l'uso di immagini bitmap. Usa SVG.

+0

Sono d'accordo che SVG sarebbe una soluzione migliore, tuttavia il supporto e le prestazioni del browser sono scadenti in questo momento. =/ –

+0

per peggiorare le cose, l'ipad2 è notoriamente pessimo nelle immagini di downscaling. diventano tutti jaggy. quello con cui io e il mio cliente siamo venuti a capo, è l'uso di 132 dpi per tutte le immagini, in linea e in background. è abbastanza accettabile sugli schermi retina e non troppo grande per il download. – commonpike

Problemi correlati