使用JavaScript确定图像是灰度还是彩色?

7

是否可以使用JavaScript确定给定图像是灰度还是彩色?


使用画布元素,循环遍历所有像素,并检查R=G=B。 - Gerben
这里有一些用JScript分析图像颜色的代码,可能对您有所帮助!链接 - Leon
@Leon - jscript和javascript是两种不同的语言,尽管你的链接是一个javascript答案。 - Ash Burlaczenko
@AshBurlaczenko - 抱歉,但JS、JavaScript和JScript是用来谈论JavaScript编程语言的。如果你指的是JScript.NET,那确实是另一种语言;-) - Leon
@Leon - JScript是由微软开发的,而JavaScript最初是由Netscape开发的。http://javascript.about.com/od/reference/a/jscript.htm - Ash Burlaczenko
2个回答

5
  1. 将图像绘制到画布上

  2. 循环遍历图像数据

  3. 测试每个像素,如果红色通道 == 绿色通道 == 蓝色通道(所有颜色通道的值都相同),则为灰度图像

如果对于所有像素都是这种情况,则为灰度图像。 如果遇到第一个不符合条件的像素,则可以停止并且它是彩色图像。


只有在支持canvas对象的HTML5浏览器中才能这样做,但如果你无法对图像进行任何处理,那么知道图像是否是灰度图像还有意义吗?如果您只想在网站上显示所使用色彩空间的元信息,则可以使用一些服务器端程序,如imagemagick或一些Java工具来确定色彩空间。 - zuloo

2

太好了!我发现如果图像是灰度的,返回的RGB值是相同的。例如,灰度图像将返回rvals为(9445,534,501,508,442,448...),gvals为(9445,534,501,508,442,448...),bvals为(9445,534,501,508,442,448...)。 另一方面,彩色图像将分别返回(1,3,5,3,8...)、(1,2,3,0,3...)和(1,2,3,0,3...)。 非常感谢您的帮助! - devnull
这里是使用该库的廉价解决方案: function isGrayscale(img) { var histret = {}; Pixastic.process(document.getElementById(img), "colorhistogram", {paint:true, returnValue:histret}); return ((histret.rvals.toString() == histret.gvals.toString()) && (histret.gvals.toString() == histret.bvals.toString())); } - devnull
不确定是否已经被删除,但现在只是一个在线赌场。 - undefined

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