2011-01-12 26 views
2

我在想如果有可能獲得網站的「特徵」顏色。例如,TechCrunch會是綠色的,ReadWriteWeb會是紅色的,CNN也是紅色的,微軟的藍色的,PHP的紫色的等等......如何獲得網站的主要顏色?

它不一定是準確的,只是一個最好的猜測。

有些事情我必須在我的腦海:

  • 解析所有CSS規則,並找到一個匹配的大部分元素
  • 解析所有的CSS規則和發現具有最大尺寸的元素的背景顏色
  • 獲取body元素的背景圖像並獲得主要顏色(這是可能的圖像)
  • 以某種方式找到網站的「標題」(DOM中的第一個元素與背景css屬性設置?)並獲取其背景

另外我需要一種消除黑色,灰色和白色的方法。

這可行嗎?你還有其他建議嗎?

P.S.對不起,我的英語

+1

你的英語不是很糟糕,不需要道歉。我看到了更糟的情況。 – 2011-01-12 14:33:02

+2

查看:http://redalt.com/Tools/I+Like+Your+Colors – theChrisKent 2011-01-12 14:59:30

回答

5

可行的,絕對。您可以使用wget工具和一些簡單的正則表達式來解析CSS顏色。然後,您可以收集所有這些顏色,並查看哪一個最常用。然而,這並不總是一個網站中實際主要顏色的良好表現形式,因爲在許多CSS規則中可能會出現多種顏色,但不經常使用。

這實際上是一個非常重要的項目,你在這裏。

我的方法是如下:

  • 下載並解析出CSS顏色和尋找不同顏色的總數。如果只有幾種顏色,則更有可能找到主要的顏色。它通常是用於<a>標籤或<h1>標籤的顏色(但如果它們是灰色或黑色/白色,則不會)。
  • 解析時,應該「聚集」顏色,例如​​與#FFEAEA相同,因爲它們只是略有不同。
  • 您需要將不同的CSS顏色轉換爲相同的格式,例如#FFF#FFFFF"white",rgb(255,255,255)等等。
  • 你需要一個規則集和編程知識
  • 尋找圖像中的主要顏色不再是微不足道的。最簡單的方法是對每個像素的每個R,G和B分量確定哪個是主要的。如果你的像素值爲R(120), G(240), B(80),它很可能是綠色的。然後對所有像素進行計數並找到主要分量。
  • @mu is too short建議將這些值轉換爲HSV並僅提取色相。
  • 另一種先進的方法將包括創建三個顏色分量的直方圖,然後計算直方圖下的面積。

概括起來講,你定義的任務是值得的論文,在我看來:)

2

好了,來了一些嚴重的非正統的方法:

使用一些屏幕捕捉包[ 1] [2]將給定的URL渲染爲光柵圖像(如PNG)。如果要查找平均值,或者給出將像素分組爲「顏色組」的閾值,請分析所得到的柵格圖像的平均像素值。使用顏色組的平均出現或最大出現(使用哪種方法取決於最重要的顏色),可以獲得頁面中主要顏色的高精度表示。

[1] http://cutycapt.sourceforge.net/ [2] http://weblogs.mozillazine.org/roc/archives/2005/05/rendering_web_p.html

1

什麼東西像GD lib採取截圖並提取主要顏色的圖像中?

1

如何使用Node.js,Phantomjs和顏色小偷

依賴關係:Node-canvas(而這又取決於Cairo),Webshot(取決於Phantomjs),Color-thief,對個別包頁中列出未成年人的依賴關係。

Webshot是無頭Webkit Phantomjs的輕型包裝。
您可以使用它來截取頁面並將其存儲在流中,示例代碼在from the project Github以下。

var webshot = require('webshot'); 
var fs  = require('fs'); 

webshot('google.com', function(err, renderStream) { 
    var file = fs.createWriteStream('google.png', {encoding: 'binary'}); 

    renderStream.on('data', function(data) { 
    file.write(data.toString('binary'), 'binary'); 
    }); 
}); 

然後可以繼續到圖像轉嫁到彩色的小偷將提取所需的數據給你,see the project samples page for examples