如何使用JavaScript测量用户显示器的亮度?

14

我注意到不同电脑上的计算机显示器亮度差异很大。

因此,这极大地改变了网页的外观。

是否有一种方法可以使用JavaScript自动检测用户显示器的亮度(或暗度),以便我可以相应地调整我的网页颜色?

更新

请注意,我不希望需要用户手动操作。我希望这种检测是自动的,这样用户就不会意识到我根据他们显示器的亮度/暗度自动动态更改颜色调色板。

更新 2

请还要注意,我并不是想要调整/校准最终用户实际的显示器,而是通过编程方式调整所选的颜色以在网页本身上显示。也就是说,如果最终用户的显示器比正常(亮度)更暗,我将显示使用更亮的颜色的网页版本。


1
抱歉,但您所“想要”的是不可能的。对于任何程序来说,更别说JavaScript了。 - bobince
5
即使这是可能的,你不觉得用户调整他们的亮度是有原因的吗? - James Gregory
+1 疯狂问题,-1 讨厌的更新 - Fire Crow
4
您可能还需要检查显示器所在房间的亮度 - 例如,如果窗帘拉上了,图像看起来会更亮。 - kennebec
@James:我不会这样想。永远不要低估用户的愚蠢。我曾经有一个客户抱怨我建造的网站太大了...她在IE7中将页面缩放了150%,却不知道自己这样做了,解决她的抱怨之道是向她展示如何放大/缩小页面,而不是缩小设计! - Josh
6个回答

15

无法通过程序实现此功能,您需要编写某种监视器校准测试,可能使用类似这些图片的变化,向用户展示两个或多个图像,并要求他们选择更接近的那一个,每次调整颜色,直到感觉所做出的更改是准确的。

编辑:基本上我建议构建类似这样的东西


2
+1 在Javascript中没有办法做到,但我认为现在已经有可能了。请看Display Data Channel http://en.wikipedia.org/wiki/Display_Data_Channel。 - Sharjeel Aziz
@HankV:目前在JavaScript中没有不需要用户参与的方法来完成这个任务。您考虑过使用Java吗?即使如此,您可能仍需要用户参与或硬件来校准显示器,以便查看给定颜色的真实世界输出,并调整该颜色直到正确为止。例如,如果0xFF0000显示为0xFF1111,则知道所有颜色必须变暗才能正确显示。 - Josh
@Josh,我觉得你误解了。我不想校准最终用户的显示器。相反,如果我知道他们的显示器比正常的暗,我只想简单地改变在网页上显示的颜色。 - HankV
@Shaji:DDC并没有提供一种方法让显示器知道房间内的环境光线,因此无法知道显示器上显示的颜色实际上是如何被感知的。为了校准,需要使用硬件或人眼,因为必须对显示器产生的实际光进行采样和分析。 - Josh
@Josh 感谢您的评论,您是正确的。我没有这样想过。 - Sharjeel Aziz
显示剩余3条评论

4
大部分亮度/黑暗设置是监视器的功能。 电脑中没有任何东西(更不用说在沙盒中运行的JavaScript)能够访问这种信息 - 这主要是计算机和显示器之间的单向数据流。 房间亮度、显示器背后是否有光等因素将同样影响屏幕外观。
没有办法让每个人都看到您网站的方式与您相同。 您越早意识到这一点,您的生活就会变得更容易。

+1 对于“没有办法让每个人都以你的方式看待你的网站。你越早意识到这一点,你的生活就会变得更轻松”! - Josh

3

那么,考虑使用Flash/Silverlight应用程序呢?如果用户有摄像头,它可以使用用户的摄像头。然后,您可以分析来自摄像头的图片/视频,从而推断出用户脸上反射了多少显示器光。

这将是一个非常非常脆弱和复杂的应用程序。


1
这根本不可能成功!但是对于创新还是要点赞的 :) - Skilldrick
1
请要求用户将镜子对准摄像头,以便摄像头捕捉屏幕并进行校准...哈哈! - Josh
1
Silverlight 4 允许访问本地 API 调用,但需要用户授予提升的权限。即使如此,我也不确定 Silverlight 是否能够访问必要的屏幕属性来进行这些类型的更改。 - Nick
1
+1 疯狂,我喜欢它 :) ,特别是因为在某种奇怪的意义上,房间的亮度确实与监视器的亮度相对应,因为低亮度只有在低光线的房间才可读,因此沿着那个方向的假设实际上是合理的。 - Fire Crow

2

你无法通过JavaScript实现这个功能(我认为在任何其他语言中,除非有一些硬件帮助,否则也无法实现)。


1

不可以。基本规则是,出于安全考虑,JavaScript不能获取有关您计算机的很多信息。


0
在您的问题更新2之后,您的要求变得更加清晰。然而,我建议您为用户提供一个在您的网站上校准亮度的功能。我们可以通过程序实现这一点。
其中一种方法是,您可以创建一个亮度条,通过偏移值来更新页面背景颜色。
/*Pure JavaScript code for brightness Calibration*/
let brightnessBar= document.getElementById('brightnessBar');
brightnessBar.addEventListener('mousemove',function(e){
    let blue = 255-`${e.offsetY}`;
    document.body.style.backgroundColor= `rgb(255,255,${blue})`;
}); 

我的网站默认背景颜色是白色,所以当有人试图通过调节滑动条减少亮度时,我正在采用 'offsetY',因为我的brightnessBar是垂直的。

另一种方法是,您可以拥有亮度条,并拥有多个图像,其中一个比另一个略暗。当用户降低亮度时,您显示较暗的图像,当用户增加亮度时,您显示更亮的图像。

我希望我能回答你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接