MobileSafari не возвращает правильную информацию о размере изображения с помощью JavaScript

У меня есть HTML тестовая страница для этой проблемы здесь. По какой-то причине MobileSafari сообщает свойствам Image.width/height любого изображения с более чем 1700 пикселями как половину его значения. То есть, свойство width для JPG, скажем, 2000, но JavaScript MobileSafari сообщает ему 1000. Если я попробую тот же код с изображением шириной 1700 пикселей, я получаю правильную ширину.

Тест Я загрузил два изображения (одинаковое изображение в разных измерениях) и отображает значения размера JavaScript. Я пробовал:

  • Chrome 22, Safari 5.1.7, Firefox 15.0.1 все в Mac OS X 10.6.8 (правильный размер)
  • iOS Simulator 4.3 SDK 3.2 (неправильный размер)
  • iPad 2 с iOS 5.1 (неправильный размер)
  • iPhone 4S с iOS 5.1 (неправильный размер)

Любые идеи, почему это происходит? Я что-то пропустил? Почему это работает с некоторыми изображениями, но не с другими?

Тест здесь: http://still-island-1941.herokuapp.com/sizetest.html

Это код 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;
    }

Это код 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>

Ответ 1

Да, существует ограничение по размеру и весу.

Из-за памяти, доступной в iOS, существуют ограничения на количество ресурсов, которые он может обрабатывать:

Максимальный размер для декодированных изображений GIF, PNG и TIFF составляет 3 мегапикселя для устройств с ОЗУ менее 256 МБ и 5 мегапикселей для устройств с большей или равной 256 МБ ОЗУ. То есть убедитесь, что ширина * высота ≤ 3 * 1024 * 1024 для устройств с ОЗУ менее 256 МБ. Обратите внимание, что декодированный размер намного больше, чем размер изображения:

Максимальный декодированный размер изображения для JPEG - 32 мегапикселя с использованием подвыборки. Изображения JPEG могут быть до 32 мегапикселей из-за поддискретизация, которая позволяет JPEG-изображениям декодироваться до размера, который имеет один шестнадцатое число пикселей. Изображения JPEG размером более 2 мегапикселей поддискретизированы, то есть декодируются до уменьшенного размера. Подвыборка JPEG позволяет пользователю просматривать изображения с последних цифровых камер.

Максимальный размер элемента холста - 3 мегапикселя для устройств с менее 256 МБ ОЗУ и 5 мегапикселей для устройств с большим или равной 256 МБ ОЗУ. Высота и ширина холста - 150 x 300 пикселей, если не указано.

Некоторые ссылки, которые могут помочь:

Приветствия