Browser 如何计算网页浏览者的每英寸像素数?

Browser 如何计算网页浏览者的每英寸像素数?,browser,size,screen,pixels,Browser,Size,Screen,Pixels,有人能想出一种方法,我可以发现一个用户的像素每英寸?我希望确保图像在web浏览器中显示的大小与我所需的大小完全相同,因此使用分辨率(我可以从用户代理获得)和每英寸像素的组合,我可以做到这一点 然而,我不确定是否有任何方法可以发现用户每英寸像素数,最好使用JavaScript或其他非侵入性方法 有什么建议吗 谢谢 CJ 您可以获取HTTP请求用户代理标头 User-Agent: Mozilla/5.0 (Linux; X11) 这将告诉您操作系统,从这里您可以做出决定。这可能非常困难-即使您设法

有人能想出一种方法,我可以发现一个用户的像素每英寸?我希望确保图像在web浏览器中显示的大小与我所需的大小完全相同,因此使用分辨率(我可以从用户代理获得)和每英寸像素的组合,我可以做到这一点

然而,我不确定是否有任何方法可以发现用户每英寸像素数,最好使用JavaScript或其他非侵入性方法

有什么建议吗

谢谢

CJ

您可以获取HTTP请求用户代理标头

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

这将告诉您操作系统,从这里您可以做出决定。

这可能非常困难-即使您设法根据dpi缩放渲染图像,您如何防止用户直接在浏览器中缩放图像


您是否考虑过一些丰富的接口技术,如flash或Silverlight?它们可能会为您提供额外的选项。

您可以像以前的绘图包一样,显示一个可伸缩的标尺。让用户拖动虚拟标尺,直到它与他们放置在屏幕上的物理标尺匹配


对于生产使用来说,这不是一个严肃的建议,但可能是获得正确答案的唯一方法:(.

您可以使用以下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>

var dpi={
v:0,
get:函数(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);
}
返回dpi.v;
}
}
警报(dpi.get(true));//重新计算
警报(dpi.get(false));//使用缓存值
然而,我认为它在windows机器上总是返回
96

据我所知,操作系统无法确定视口的实际物理尺寸。因此,软件很可能不可能知道真实的DPI

然而,专业人士认为,某些分支确保屏幕上的DPI与现实生活中的DPI匹配。在这种情况下,上面的javascript可能就足够了

注意:
在WinXP和Win2k上,在Opera9、IE6&7和Firefox 3.6中测试了上述代码

更新:

添加了noCache参数。但我怀疑它是否会有任何效果。我在上述windows版本上使用zoom-in FireFox和Opera对其进行了测试,他们不断引用DPI为'96',而不管缩放的大小。看看移动设备如何使用它会很有趣。

最安全、最简单的方法是告诉浏览器y的大小您需要图像。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" />


不过,我也在考虑手机浏览器,这些浏览器的像素/英寸级别更高,范围更广,因此我想知道是否有任何编程方法可以做到这一点。它们已经标准化了,但实际的显示可能会有相当大的差异——例如,我的上网本的实际DPI约为170,而我的台式机的DPI约为170p在这里工作的是~90。想想看:当你得到同样分辨率的17英寸和19英寸显示器时,实际的DPI不可能是相同的:)。可能很难。我一生中从未使用过将DPI设置为正确的、真实的屏幕DPI的计算机。当然,如果你的特定受众普遍认为它是正确的,那也没关系。@Bart:我有,但我自己设置了它们(并且使用Linux,它比Windows更能处理事实),我认为尺子的想法是最有希望的,尽管对你的用户来说有点痛苦,如果他们正在查看大量图像,您可以第一次显示标尺并保持其设置。另外,也许你可以补充一下你为什么需要这个。你知道flash是否能够提供我需要的信息吗?我很确定flash不能:(.我认为这是唯一有效的方法。但它不是很实用。根据下面原始海报中关于移动浏览器的评论:请记住,移动电话浏览器允许用户放大和缩小,因此DPI将是一个非常动态的值。缓存为DPI计算的值可能没有意义。@Dancrumb:This也适用于桌面浏览器。许多新的浏览器版本都有缩放功能。Opera很早就有了这一功能,现在其他人也有了。谢谢Dan,我将对此进行一些测试,我希望这类功能能够实现:)-1为我返回了96。使用,我有128像素每英寸。除非我感到困惑,否则这个答案是不准确的。@antony.trupe,阅读说明,在windows上它将始终返回96。我只是在windows上的firefox中尝试了这一点,尽管单位有效,但它们似乎无法正常工作。在我的显示器上,它的指定值大约为1.5cm=1cm实际值。我不知道在其他浏览器中会是什么样子。这根本不起作用。浏览器将为此使用操作系统的默认dpi。感谢您对该想法的兴趣和测试-v。这对我很有帮助,但令人遗憾的是,一些简单直观的想法不起作用:(谢谢你的想法!你接受的解决方案依赖于使用英寸设置样式,就像我的解决方案一样。唯一的区别是我使用样式设置直接在图像上设置大小,而jacco使用相同的样式来计算dpi。我在IE 8、Chrome 4、Firefox 3.5.8中测试了我的解决方案,并且都显示了相同的大小。W当我测量时,误差约为1-2mm。我的操作系统是Windows Vista。我还尝试了Jacco的方法来获得dpi,然后使用结果计算图像大小,并使用javascript在图像上设置它们。测量的大小与我的解决方案完全相同!结论:如果你需要