Как я могу узнать веб-страницу пиксели на дюйм средств просмотра?

Кто-либо может думать о способе, которым я могу обнаружить пользовательские пиксели на дюйм? Я хочу удостовериться, что изображение отображает в веб-браузере точно размер, мне нужен он к, таким образом с помощью комбинации разрешения (который я могу получить от агента пользователя), и пиксели на дюйм, я мог сделать это.

Однако я не уверен, существует ли какой-либо способ обнаружить пользовательские пиксели на дюйм, идеально с помощью JavaScript или некоторого другого неразрушающего метода.

Какие-либо предложения?

Спасибо,

ГЛАВНЫЙ СУДЬЯ

7
задан Caroline 12 February 2010 в 13:26
поделиться

5 ответов

Вы можете использовать следующую функцию javascript для получения DPI.

<script type="text/javascript">
   var dpi = {
      v: 0,
      get: function (noCache) {
         if (noCache || dpi.v == 0) {
            e = document.body.appendChild(document.createElement('DIV'));
            e.style.width = '1in';
            e.style.padding = '0';
            dpi.v = e.offsetWidth;
            e.parentNode.removeChild(e);
         }
         return dpi.v;
      }
   }

    alert(dpi.get(true));  // recalculate
    alert(dpi.get(false)); // use cached value
</script>

Однако я думаю, что на компьютерах с Windows он всегда будет возвращать 96 .

Насколько мне известно, операционная система не может определить фактические физические размеры области просмотра. Таким образом, вполне может быть, что программное обеспечение на самом деле не может знать реальный DPI.

Тем не менее, профессионалы в некоторых областях следят за тем, чтобы разрешение экрана соответствовало реальному. В этом случае, вероятно, будет достаточно приведенного выше javascript.

Примечание:
Тестировал приведенный выше код в Opera 9, IE6 и 7 и Firefox 3.6 на WinXP и Win2k.

Обновление:
Добавлен параметр noCache. Но я сомневаюсь, что это подействует. Я тестировал его с увеличением в FireFox и Opera на вышеупомянутых версиях Windows, и они продолжают указывать DPI как «96», независимо от величины увеличения. Было бы интересно посмотреть, что из этого делают мобильные устройства.

6
ответ дан 6 December 2019 в 21:13
поделиться

Сегодня дисплеи поддерживают 96 пикселей / дюйм или 72 пикселей / дюйм .

Вы можете получить заголовок User-Agent HTTP-запроса

User-Agent: Mozilla/5.0 (Linux; X11)

, он сообщит вам операционную систему, и отсюда вы сможете принять решение.

0
ответ дан 6 December 2019 в 21:13
поделиться

Это может быть очень сложно - даже если вам каким-то образом удастся масштабировать отрисованное изображение на основе dpi, как вы предотвратите масштабирование изображения пользователем непосредственно в браузере?

Рассматривали ли вы технологии богатого интерфейса, такие как flash или Silverlight? Они могут дать вам дополнительные возможности.

0
ответ дан 6 December 2019 в 21:13
поделиться

Ну, я не думаю, что "есть что-то гнилое в штате Редмонд!", по крайней мере, ваш сценарий не является доказательством этого. Но я действительно думаю , что это поведение - не ошибка, а скорее особенность. Почему? Просто потому, что Perl regexes имеет то же поведение (я только что его проверил), и я считаю, что PCRE PHP (Perl Compatible Regular Expressions) ведут себя так же. И MS только что заставил свои методы Regex вести себя так же, как де-факто классические Perl. И теперь мой вопрос: "Что не так в царстве JS?":)

-121--2639921-

Есть достаточно изменений в математике между языками, что я сомневаюсь, что есть языковой агностический способ сделать это. Просто слишком много вариаций в том, как языки пишут выражения для базовой одной техники, чтобы работать с каждым возможным языком.

Если вы выберете конкретный язык, это вполне возможно. Например, в C или C++ можно сделать что-то вроде: n = (n-1) + ((n-1) = 0) * max;

В случае, если вы заботитесь о том, как это работает: в C сравнение ( = = в данном случае) дает результат 0 для false, и 1 для true. Итак, мы добавляем max * 0 , когда/если n-1! = 0 , и max * 1 , когда/если n-1 = = 0 .

-121--4268333-

Можно сделать так, как это делали пакеты чертежей старых, и отобразить растягиваемую линейку. Пусть пользователи перетаскивают виртуальную линейку до тех пор, пока она не будет соответствовать физической линейке, которую они поместили на экран.

Не является серьезным предложением для использования в производстве, но, вероятно, единственный способ на самом деле получить правильный ответ: (.

5
ответ дан 6 December 2019 в 21:13
поделиться

Самым безопасным и простым способом было бы сообщить браузеру, какого размера вы хотите получить изображение. CSS поддерживает дюйм и метрики, таким образом, вы могли определить изображение как любой из этих примеров:

<img src="image.png" style="width:15cm;height:10cm;" alt="Centimeters" />
<img src="image.png" style="width:5.9in;height:3.9in;" alt="Inches" />
<img src="image.png" style="width:150mm;height:100mm;" alt="Millimeters" />
1
ответ дан 6 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: