【发布时间】:2010-10-30 11:22:53
【问题描述】:
我想以编程方式确定用户显示器的 DPI,以便以精确的单位数(厘米/英寸)显示网页。我知道这是一个奇怪的要求:它是针对一个可视化研究项目的,它是一种控制。我们目前通过让用户将信用卡放在屏幕上并将可调整大小的 div(通过 Mootools)与真实信用卡匹配来做到这一点,瞧,我们可以获取 DPI 并正确显示页面。
谁能想到一种编程方式来做到这一点?
【问题讨论】:
标签: javascript mootools dpi
我想以编程方式确定用户显示器的 DPI,以便以精确的单位数(厘米/英寸)显示网页。我知道这是一个奇怪的要求:它是针对一个可视化研究项目的,它是一种控制。我们目前通过让用户将信用卡放在屏幕上并将可调整大小的 div(通过 Mootools)与真实信用卡匹配来做到这一点,瞧,我们可以获取 DPI 并正确显示页面。
谁能想到一种编程方式来做到这一点?
【问题讨论】:
标签: javascript mootools dpi
你不能。 DPI 是屏幕像素分辨率和显示器物理尺寸的函数。后者在我知道的任何浏览器界面中都不可用。
【讨论】:
如果您在 javascript/mootools 中执行此操作,CSS units 是您的朋友。您可以以英寸或厘米,甚至磅(1/72 英寸)为单位指定尺寸。如果您出于某种原因绝对需要 DPI,即使您可以指定这些单位的大小,只需将您正在使用的“可调整大小”的 div 调整为已知大小并根据转换后的像素大小进行计算。
编辑:
不幸的是,CSS 单位 点、厘米和英寸不是物理上的 正确的。他们只是相对 正确的。这是我的第一件事 尝试直到我意识到它不是 工作并检查了CSS规范..到 我很沮丧。 – 布兰登·佩尔弗雷
这是一个很好的观点;浏览器倾向于通过假设默认 DPI(我认为是 72 或 96)来伪造它。
好吧,如果您需要像您要求的那样精确调整尺寸,那您就不走运了。如果无法读取浏览器所在显示器的当前分辨率以及该显示器的“可视屏幕区域”,您将永远无法获得它。你不可能通过Javascript得到它。
我建议您做出默认假设,即浏览器会根据 CSS 单位执行和调整大小。然后,您可以允许您的用户使用您提到的方法“调整大小”,但仅在必要时。在单独的页面上执行此操作,并将 DPI 计算存储为用户会话的一部分或作为 cookie。
或者,一旦 Microsoft 修复了this bug,您就可以使用 Silverlight 的“设备独立单元”来进行精确缩放。
【讨论】:
我认为您不会得到精确的结果 - 例如,您可以使用显示器调整图片大小。我宁愿坚持用户驱动的方法,尽管你可以 f.e.检测屏幕分辨率以进行初步估算。
【讨论】:
如果目标计算机上没有运行代码,则无法通过浏览器进行操作。如果您可以在目标计算机上安装一些东西,您可能能够确定足够的显示器来计算它。
【讨论】: