2012-09-23 14 views
6

Tengo una test page for this issue here HTML. Por alguna razón MobileSafari está reportando los Image.width/height propiedades de cualquier imagen con más de 1.700 píxeles como la mitad de su valor. Es decir, la propiedad width del JPG es, digamos, 2000, pero MobileSafari JavaScript la informa como 1000. Si intento el mismo código con una imagen de 1700px, obtengo el ancho correcto.MobileSafari no devolver la información de tamaño de imagen de la derecha a través de JavaScript

The test lo hice cargas dos imágenes (misma imagen en diferentes dimensiones) y muestra los valores de tamaño de JavaScript. Probé en:

  • Chrome 22, Safari 5.1.7, Firefox 15.0.1 todo en Mac OS X 10.6.8 (tamaño correcto)
  • simulador de iOS 4.3 SDK 3.2 (tamaño incorrecto)
  • iPad 2 con iOS 5.1 (tamaño incorrecto)
  • iPhone 4S con iOS 5.1 (tamaño incorrecto)

Cualquier idea por qué está sucediendo esto? ¿Me estoy perdiendo un ajuste en alguna parte? ¿Por qué funciona con algunas imágenes pero no con otras?

La prueba está aquí: http://still-island-1941.herokuapp.com/sizetest.html

Este es el código JavaScript:

var imgBig, imgSmall; 

    function init() { 
     imgBig = new Image(); 
     imgBig.onload = handleBig; 
     imgBig.src = "/images/size.jpg"; 
     imgSmall = new Image(); 
     imgSmall.onload = handleSmall; 
     imgSmall.src = "/images/test1.jpg"; 
     document.getElementById("browser").innerHTML = navigator.userAgent; 
    } 

    function handleBig() { 
     document.getElementById("dimensionsBig").innerHTML = imgBig.width + "x" + imgBig.height; 
     document.getElementById("testBig").src = imgBig.src; 
    } 

    function handleSmall() { 
     document.getElementById("dimensionsSmall").innerHTML = imgSmall.width + "x" + imgSmall.height; 
     document.getElementById("testSmall").src = imgSmall.src; 
    } 

Este es el código HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> 
    <meta name="viewport" content="width=device-width, initial-scale=1"/> 

    <title>MobileSafari image dimensions test</title> 
</head> 
<body onload="init()"> 
    <p>your browser: <strong><span id="browser"></span></strong></p> 
    <p>big image dimensions: <strong><span id="dimensionsSmall"></span></strong> (should be 1700x1134)</p> 
    <img id="testSmall" /> 
    <p>small image dimensions: <strong><span id="dimensionsBig"></span></strong> (should be 2000x1334)</p> 
    <img id="testBig" /> 
</body> 
</html> 
+0

En mi caso yo estaba loadi ng una imagen de 3000 píxeles cuadrados, y Javascript en iOS me decía que el evento de carga había disparado bien, aunque la altura y el ancho informados en ese momento eran cero. Supongo que tengo el mismo problema. –

Respuesta

3

Sí, existe una limitación en el tamaño y peso .

Debido a la memoria disponible en IOS, hay límites en el número de recursos que puede procesar:

El tamaño máximo de decodificado GIF, PNG y TIFF es de 3 megapíxeles para dispositivos con menos de 256 MB de RAM y 5 megapíxeles para dispositivos con una RAM mayor o igual a 256 MB. Es decir, garantizar que la anchura * altura ≤ 3 * 1024 * 1024 para dispositivos con menos de 256 MB de RAM. Nota que el tamaño decodificada es mucho mayor que el tamaño codificada de una imagen:

El máximo decodificada tamaño de la imagen para JPEG es de 32 megapíxeles utilizando submuestreo. Las imágenes JPEG pueden ser de hasta 32 megapíxeles debido a submuestreo, lo que permite que las imágenes JPEG para descifrar a un tamaño que tiene un XVI el número de píxeles. Las imágenes JPEG de más de 2 megapíxeles se submuestrean, es decir, se decodifican a un tamaño reducido. El submuestreo JPEG permite al usuario ver imágenes de las cámaras digitales más recientes.

El tamaño máximo para un elemento de lienzo es de 3 megapíxeles para dispositivos con con menos de 256 MB de RAM y 5 megapíxeles para dispositivos con mayor o igual a 256 MB de RAM. El alto y ancho de un objeto canvas es 150 x 300 píxeles si no se especifica.

Algunos enlaces que podrían ayudar:

Saludos

+0

No estoy seguro de si este es el motivo de mi problema anterior, ya que, como puede ver en la [prueba] (http://still-island-1941.herokuapp.com/sizetest.html) que hice, el " la "imagen grande" es 2000x1334 = 2,668,000 que es menor que 3x1024x1024 = 3,145,728 píxeles. – mga

+0

Intenta bajar la calidad (peso) de la imagen para ver si cambia algo. ¿Has probado la solución que obtuve para ver si cambia algo? – Rytek

+0

Cargué un nuevo archivo "grande" comprimido (calidad del 20%), se ve terrible ... 72kb (comprimido) ... todavía no hay cambio en las dimensiones informadas por MobileSafari – mga

Cuestiones relacionadas