Как я могу узнать количество просмотров страниц на дюйм? - PullRequest
7 голосов
/ 12 февраля 2010

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

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

Есть предложения?

Спасибо

CJ

Ответы [ 5 ]

6 голосов
/ 22 февраля 2010

Вы можете использовать следующую функцию 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>

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

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

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

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

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

5 голосов
/ 17 февраля 2010

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

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

1 голос
/ 23 февраля 2010

Самым безопасным и простым будет сказать браузеру, какой размер изображения вы хотите. 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" />
0 голосов
/ 17 февраля 2010

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

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

0 голосов
/ 12 февраля 2010

Дисплеи сегодня поддерживают 96px / inch или 72pixels / inch .

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

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

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

...