如何访问屏幕显示’;通过javascript的DPI设置?

如何访问屏幕显示’;通过javascript的DPI设置?,javascript,dpi,display-dpi,Javascript,Dpi,Display Dpi,有没有办法在Javascript函数中访问屏幕显示的DPI设置 我试图在页面上定位一个HTML面板,当用户的DPI设置为大(120)时,它会将该位置取消。我需要知道DPI是什么,这样我才能相应地调整位置。我不知道有什么方法,但是,它们可能是一种替代解决方案: 在“pt”和“em”中指定度量值,这是屏幕相对度量值 em: 1em等于当前字体大小2em表示当前字体大小的2倍。例如,如果一个元素的字体为12 pt,则'2em'为24 pt。'em'是CSS中非常有用的单元,因为它可以自动适应读者

有没有办法在Javascript函数中访问屏幕显示的DPI设置


我试图在页面上定位一个HTML面板,当用户的DPI设置为大(120)时,它会将该位置取消。我需要知道DPI是什么,这样我才能相应地调整位置。

我不知道有什么方法,但是,它们可能是一种替代解决方案:

在“pt”和“em”中指定度量值,这是屏幕相对度量值

  • em:
    1em
    等于当前字体大小
    2em
    表示当前字体大小的2倍。例如,如果一个元素的字体为
    12 pt
    ,则
    '2em'
    24 pt
    'em'
    是CSS中非常有用的单元,因为它可以自动适应读者使用的字体
  • pt:
    点(
    1磅
    1/72英寸
    相同)
  • 个人电脑:
    pica(
    1件
    12点
    相同)

首先,为了帮助解决DPI(每英寸点数)这一术语可能存在的(也是非常常见的)混淆:

DPI不完全是“显示设置”的一部分。它(mis)用于两种不同的上下文:

  • 显示器(或视频)每英寸的本机像素数。它确定像素的大小。您可以在14英寸笔记本电脑屏幕和17英寸液晶显示器上使用相同的1024x768分辨率。前者约为1280/14=91 DPI,后者约为1280/17=75 DPI。屏幕的DPI是不可变的;无法使用显示设置对其进行更改
  • 印刷时在纸上每英寸的点。这是打印机/复印机/传真机在一英寸纸内可以打印的并排点的数量。大多数打印机可以设置为以较低的DPI打印,只需将每个点打印为两个、四个等点 打印图像时,有许多因素会影响纸张上图像的最终尺寸:

    • 源图像的尺寸——这是存在的像素或数据量
    • 源图像的DPI。此值确定打印图像时应如何解释尺寸
    • 如果源图像没有嵌入DPI信息(JPEG可以有,GIF永远不会有),则正在使用的程序可能具有指定DPI的设置。这可能是图像查看器/编辑器,甚至是web浏览器
    • 通常在打印对话框中指定的缩放因子
    • 打印机的当前DPI设置
    • 打印机的物理(最大)DPI
    底线是,您正在打印的图像将有效地重新采样(缩小或放大),以匹配打印过程中使用的最终DPI。任何参与方(程序、打印驱动程序、打印机)都可能造成这种情况

    现在,回到你的问题上来。不,您无法确定屏幕的DPI,因为它不在软件域中。这是一个硬件领域的术语,描述用户可以购买多大的显示器更新:我最初是在2009年写下这个答案的,当时我了解了当前的技术。正如@thure所指出的,您现在可以(从2012年开始?)使用该函数来确定屏幕的DPI

    如果您试图在打印HTML布局时达到精度,正如其他人所建议的,您的CSS应该使用诸如em、pt或pc之类的打印维度,而不是px。但是,最终结果可能仍取决于浏览器的使用。如果您可以选择将HTML转换为PDF(或从头开始生成PDF),那么打印PDF将在屏幕和纸张上为您提供最真实的所见即所得


    看起来您可以在IE中使用'screen'DOM对象,它的get属性用于deviceXDPI、deviceYDPI、logicalXDPI、logicalYDPI

    这里有一个来自 (我还没试过,好像是个十足的黑客:) 只需创建1英寸宽的东西,并以像素为单位进行测量

    console.log(document.getElementById(“dpi”).offsetHeight)
    
    #dpi{
    高度:1英寸;
    左-100%;
    位置:绝对位置;
    前-100%;
    宽度:1in;
    }
    您可以使用该属性获取屏幕/页面的缩放比例。这在当前桌面(Windows)上的IE、Edge、Chrome和Firefox中运行良好,但它似乎不是当前的标准。它返回1在我的台式电脑与传统的显示器和2在表面与200%的缩放。这些天的值应该在1.0到3.0之间。我可以用它来校正动态图像大小,以便在高分辨率屏幕上提供更清晰的图像


    如果您需要一些逻辑dpi/ppi,请将该值乘以96。虽然它不是实际的物理ppi,只是操作系统对待它的样子。

    虽然您不能更改物理DPI,但您可以更改将测量值映射到像素的软件,该软件由软件控制,该软件具有任意值,通常通过EDID从监视器探测,但可以覆盖。这就是我认为OP的目的。不,在很多情况下,从软件中了解物理属性,如DPI和屏幕尺寸——包括从Javascript这样的高层次了解——是很有用的。API设计人员如果不公开如此明显的东西,因为他们想不出需要它的情况,那么他们肯定既缺乏远见,又有无所不知的错觉。@Glenn Maynard:是的,事实上,Android在其图形API中支持DIP(独立于设备的像素)。较低级别的光栅化库根据屏幕的已知DPI将倾角转换为实际像素。@早在2009年我写这个答案时,我就不知道有
    matchMedia
    函数。答案可能有点过时,因此在今天变得不准确。我将更新它以提及函数。谢谢你提出这个,Upda