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