2009-06-01 26 views
18

Me gustaría determinar programáticamente el DPI de la pantalla de un usuario para mostrar una página web en un número preciso de unidades (centímetros/pulgadas). Sé que es una petición extraña: es para un proyecto de investigación de visualización y es un tipo de control. Actualmente lo hacemos haciendo que el usuario coloque una tarjeta de crédito en la pantalla y haga coincidir un div redimensionable (a través de Mootools) con la tarjeta de crédito real, y listo para que podamos obtener el DPI y mostrar la página correctamente.¿Determinado programáticamente DPI a través del navegador?

¿Alguien puede pensar en una forma programática para hacer esto?

+0

duplicado posible de [Detectar el sistema de DPI/PPI de JS/CSS?] (Http://stackoverflow.com/questions/279749/detecting-the-system-dpi-ppi-from -js-css) – Endless

Respuesta

3

Si está haciendo esto en javascript/mootools, CSS units es su amigo. Puede especificar tamaños en pulgadas o centímetros, o incluso puntos (1/72 de pulgada). Si necesita DPI por alguna razón, aunque puede especificar tamaños en esas unidades, simplemente ajuste el tamaño del div "de tamaño variable" que está usando a un tamaño conocido y calcule desde el tamaño de píxel traducido.

Editar:

Por desgracia, las unidades de CSS puntos, cm, y en que no son físicamente correcta. Solo son relativamente correctos. Esto fue lo primero que intenté con hasta que me di cuenta de que no estaba trabajando en y comprobé la especificación CSS ... en mi consternación. - Brandon Pelfrey

Eso es un buen punto; los navegadores tienden a falsificarlo asumiendo un DPI predeterminado (creo 72 o 96) y yendo con eso.

Bueno, si necesita un tamaño de precisión como el que está pidiendo, no tiene suerte. Nunca podrá obtenerlo sin poder leer tanto la resolución actual del monitor en el que se encuentra el navegador como el "área de pantalla visible" de ese monitor. No es posible conseguirlo a través de Javascript.

Sugiero que realice la suposición predeterminada de que los navegadores hacen y el tamaño de acuerdo con las unidades de CSS. A continuación, puede permitir que los usuarios "ajusten el tamaño" con el método que mencionó, pero solo si es necesario. Haga esto en una página separada con el cálculo DPI almacenado como parte de la sesión de los usuarios o como una cookie.

Alternativamente, una vez que Microsoft corrige this bug, puede usar las "unidades independientes del dispositivo" de Silverlight para obtener una escala precisa.

+1

Desafortunadamente, las unidades CSS de puntos, cm y adentro no son físicamente correctas. Ellos son solo relativamente correctos. Esto fue lo primero que intenté hasta que me di cuenta de que no estaba funcionando y revisé la especificación de CSS ... para mi consternación. –

+1

El enlace a las Unidades CSS ahora es: http://www.w3schools.com/cssref/css_units.asp – Christian

+0

Actualizado, gracias @Christian – Randolpho

2

No puede. DPI es una función de la resolución de píxel de la pantalla y las dimensiones físicas de la pantalla. Este último no está disponible en ninguna interfaz de navegador de la que tenga conocimiento.

0

Creo que no obtendrá resultados precisos; por ejemplo, puede cambiar el tamaño de la imagen utilizando el monitor. Preferiría seguir con el método dirigido por el usuario, aunque puedes f.e. detectar la resolución de pantalla para una primera estimación.

0

No es posible desde un navegador sin código ejecutándose en la computadora de destino. Si puede instalar algo en la computadora de destino, es posible que pueda determinar lo suficiente sobre el monitor para calcularlo.

Cuestiones relacionadas