2012-03-12 15 views
8

Tengo un sitio web móvil que aprovecha jQuery Mobile, sin embargo, las imágenes, francamente, parecen basura en el iPhone 4/4S. Supongo que lo mismo ocurrirá con el "nuevo iPad" cuando esté disponible más adelante esta semana.¿Cuál es la forma correcta de manejar imágenes de alta resolución para pantallas de alta resolución (principalmente pantallas retina iOS)?

Sé que esto tiene algo que ver con la relación de píxeles y/o la imagen DPI (o PPI o lo que sea que quiera llamarlo ... no nos metamos en una discusión sobre eso). Simplemente quiero saber cuál es el mejor método para servir imágenes web de alta resolución para estas pantallas retina iOS.

Al principio, pensé que cambiar la imagen DPI (en Photoshop) resolvería el problema. Tomé algunas imágenes de muestra y las reduje a un ancho de 190px. Guardé una imagen a 72 ppp y la otra a 200 ppp. Esto no tuvo efecto. Véalo usted mismo (en un iPhone 4/4S): http://haxway.com/restest/1.html La imagen inferior de cada uno es la de 200 DPI.

Luego, en lugar de guardar la imagen de alta resolución a 200 ppp, la guardé a 72 ppp otra vez, pero esta vez aumenté el ancho (a 528 px) para que al escalar a un ancho de 190px fuera a ~ 200 DPI. Esto pareció hacer el truco: http://haxway.com/restest/2.html Si ve la fuente, puede ver que estoy forzando un ancho/alto en las etiquetas de la imagen (<img src="w4.jpg" alt="" width="190" height="143">).

Sin embargo, no estoy seguro de que esta sea la mejor solución. ¿No usar los atributos de ancho/alto para escalar una imagen tiene un impacto en el rendimiento de la representación ya que el dispositivo tiene que escalar la imagen en lugar de simplemente cargarla (y no tocarla más)?

Después de algunas investigaciones, parece que hay algunas consultas de medios de CSS como -webkit-min-device-pixel-ratio [1] donde puede utilizar CSS diferentes para pantallas de alta resolución y, por lo tanto, cargar imágenes de mayor resolución en el CSS. Pero tengo que apuntar a las etiquetas HTML <img>. Otro artículo que leí (lo siento, perdí el enlace) sugirió usar Javascript para cambiar las imágenes "normales" por las de alta resolución. ¡Eso suena loco!

¿Hay una mejor manera de solucionar esto? Me doy cuenta de que las opiniones pueden diferir sobre cuál es la "mejor" manera. Si se pudieran explicar los pros/contras de cada método, ¡sería genial! Mi objetivo es usar el método que sea más rápido (con suerte sin usar Javascript, etc.).

Gracias!

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

+0

Su muestra es un poco sospechosa. Lo que hacen los navegadores es mostrar las imágenes píxel por píxel. Visto así, tus imágenes son similares. Los tamaños de impresión de las imágenes de 200 ppp son mucho más pequeñas. Si, en cambio, cargas la misma imagen en una resolución más alta, que contiene más píxeles, verás que los navegadores muestran las imágenes 3 veces más grandes. Que tampoco es lo que quieres – commonpike

+0

... exactamente. Eso no es lo que quiero. Entonces, ¿cómo este enfoque actual es "sospechoso"? (No es mi intención atacar ... solo curiosidad.) –

+0

perdón si eso sonó ofensivo. Me resultaba confuso: lo que quiere, supongo, es la misma imagen de tamaño en una resolución más alta. Pero cargó una imagen más pequeña en una resolución más alta en su lugar. Si los navegadores * * respetaran los ppp, las imágenes de 200 ppp que cargó serían mucho más pequeñas. (en cualquier caso, gracias por las imágenes de prueba, me ayudaste). – commonpike

Respuesta

1

Usted tendrá que ejecutar algún tipo de JS como la solución. El que elige usar en este momento es uno por mat wilcox. Le servirá la imagen correcta a la pantalla. La gran ventaja de esta solución es que almacena en caché las imágenes para reducir la carga en los usuarios.

http://adaptive-images.com/

hay un empuje para traer un nuevo elemento de imagen html que puede tomar varias fuentes para superar este problema, pero es una forma de salir todavía.

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

+1

¿Cómo es esto una ventaja sobre simplemente servir la imagen de alta resolución con los atributos 'width' y' height' establecidos en la etiqueta '' (como mi segundo ejemplo)? Un dispositivo que no tiene una pantalla de "alta resolución" todavía mostrará la imagen bien. Entiendo que conservará el ancho de banda, pero ¿algo más? Siento que una solución de Javascript sería más lenta, ya que probablemente se ejecutaría después de que el documento esté listo, etc. El almacenamiento en caché no debería ser un problema, ya que siempre puedo configurar el encabezado de Caducidad de forma adecuada. No me refiero a atacar esta solución, solo quiero saber todos los costos/beneficios. ¡Gracias! –

0

Para las etiquetas de imagen, creo que ya ha dado su propia solución. El gran beneficio es enviar una misma imagen para todos los clientes.

Para imágenes CSS, ¿no puedes hacer lo mismo? Olvídese de la -webkit-min-device-pixel-ratio torpe que requerirá una imagen diferente cada vez que cocinan un nuevo dispositivo. Simplemente envíe la imagen más grande y use el background-size de CSS3 para reducirla. No he probado esto. IE < 9 le dará un problema.

Yo soy, probablemente como usted, aturdido html/css no proporciona un método adecuado para hacer esto todavía, solo tales soluciones hacky. También estoy, como usted, confundido como por qué los navegadores no solo se adhieren a las imágenes de información DPI. Si alguien sabe, los comentarios son apreciados.

¿Hay una mejor manera de solucionar esto?

Sí, evite el uso de imágenes de mapa de bits. Use SVG.

+0

Acepto que SVG sería una mejor solución, sin embargo, el soporte y el rendimiento del navegador son deficientes en este momento. =/ –

+0

para empeorar las cosas, el ipad2 es notoriamente malo en las imágenes de reducción de escala. se vuelven todo melifluos. Lo que mi cliente y yo hemos aceptado, es usar 132dpi para todas las imágenes, en línea y en segundo plano. es bastante aceptable en pantallas retina y no demasiado grande para descargar tampoco. – commonpike

Cuestiones relacionadas