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

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

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

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

Спасибо,

CJ


person Caroline    schedule 12.02.2010    source источник
comment
Может быть сложно. Я никогда в жизни не использовал компьютер, на котором DPI был бы настроен на правильный, реальный DPI экрана. Конечно, если ваша конкретная аудитория в целом считает это правильным, тогда ничего страшного.   -  person Bart van Heukelom    schedule 17.02.2010
comment
@Bart: У меня есть, но я настроил их сам (и использую Linux, который лучше справляется с правдой, чем Windows)   -  person Andrew Aylett    schedule 17.02.2010
comment
Я думаю, что идея линейки является наиболее многообещающей, хотя и немного неприятна для ваших пользователей. Если они просматривают много изображений, вы можете просто показать линейку в первый раз и сохранить их настройки. Также, возможно, вы могли бы добавить к своему вопросу, зачем вам это нужно.   -  person PeteT    schedule 23.02.2010


Ответы (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>

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

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

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

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

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

person Jacco    schedule 22.02.2010
comment
Согласно приведенному ниже комментарию оригинального плаката о мобильных браузерах: имейте в виду, что браузеры мобильных телефонов позволяют пользователям увеличивать и уменьшать масштаб, поэтому DPI будет чрезвычайно динамичным значением. Может не иметь смысла кэшировать значение, рассчитанное для DPI. - person Dancrumb; 23.02.2010
comment
@Dancrumb: это также относится к настольным браузерам. Многие из новых версий браузеров имеют функцию масштабирования. Opera очень рано пришла к этому, а теперь последовали и другие. - person awe; 23.02.2010
comment
Спасибо, Дэн, я буду тестировать это, я надеялся, что что-то в этом роде возможно :) - person Caroline; 23.02.2010
comment
-1 Вернули мне 96. Использование swell3d.com/2008/07/how -many-pixel-per-inch-sizes.html, у меня 128 пикселей на дюйм. Если я не в замешательстве, этот ответ не точен. - person antony.trupe; 14.10.2012
comment
@ antony.trupe, прочтите заметку, в windows всегда будет возвращать 96. - person Jacco; 15.10.2012

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

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

person Andrew Aylett    schedule 17.02.2010
comment
Я думаю, что это единственный метод, который действительно сработает. Но это не очень практично. - person Jacco; 22.02.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" />
person awe    schedule 23.02.2010
comment
Я просто пробовал это в firefox на окнах, хотя единицы действительны, они, похоже, не работают правильно. На моем мониторе это было примерно 1,5 см = 1 см фактическое. Не знаю, как это будет в других браузерах. - person PeteT; 23.02.2010
comment
Это вообще не работает. Для этого браузер будет использовать разрешение по умолчанию для операционной системы. - person Jacco; 23.02.2010
comment
Спасибо за интерес и тестирование этой идеи - v. Полезно для меня и очень жаль, что то, что настолько простое и интуитивно понятное, не работает :( Тем не менее, спасибо за идею! - person Caroline; 23.02.2010
comment
Решение, которое вы приняли, основывается на стиле настройки с использованием дюйма, как и мое решение. Единственная разница в том, что я использую настройку стиля, чтобы установить размер непосредственно на изображении, а jacco использовал тот же стиль для вычисления dpi. Я тестировал свое решение в IE 8, Chrome 4, Firefox 3.5.8, и все они отображали одинаковый размер. Когда я измерил, это было неправильно примерно на 1-2 мм. Моя операционная система - Windows Vista. Я также попробовал метод Жакко для получения dpi, а затем использовал результат, чтобы вычислить размеры изображения и установить их на изображении с помощью javascript. Измеренный размер был точно таким же, как и в моем решении! - person awe; 24.02.2010
comment
Вывод: Если все, что вам нужно сделать, это установить размер изображения, воспользуйтесь моим методом (он проще). Если вам нужно значение DPI и для других целей, используйте метод Жакко. Если этого недостаточно, я думаю, вам следует воспользоваться линейкой, предложенной Эндрю Айлеттом. - person awe; 24.02.2010

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

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

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

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

person Elzo Valugi    schedule 12.02.2010
comment
Я также думаю о браузерах для мобильных телефонов, и они имеют гораздо более высокие уровни и более разнообразные диапазоны пикселей на дюйм, поэтому мне было интересно, есть ли какой-либо программный способ сделать это. - person Caroline; 17.02.2010
comment
Они стандартизировали такое видение, но фактические дисплеи могут немного отличаться - например, у моего нетбука реальный DPI составляет ~ 170, а мой рабочий стол - ~ 90. Подумайте об этом: когда вы получаете и 17, и 19 мониторов с одинаковым разрешением, фактический DPI не может быть одинаковым :). - person Andrew Aylett; 17.02.2010

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

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

person Marek    schedule 17.02.2010
comment
Вы знаете, сможет ли вспышка предоставить нужную мне информацию? - person Caroline; 19.02.2010
comment
Я почти уверен, что flash не может :(. - person Andrew Aylett; 19.02.2010