2013-02-11 152 views
1

我正在寫一個圖像搜索引擎,它允許用戶按顏色搜索。作爲其中的一部分,我需要確定圖像是灰度(僅包含黑色,白色或灰色陰影)還是包含任何顏色。PHP如何檢測圖像是否包含顏色?

如何檢測圖像是否包含黑色,白色和灰色陰影之外的任何像素?

+0

您可以使用[從另一個SO問題的解決方案](http://stackoverflow.com/questions/1746530/get-image-color) – 2013-02-11 10:30:12

回答

3

您必須使用imagecolorat()(請參見示例#2)遍歷每個像素。

紅色,綠色和藍色的灰度顏色將具有相同的值。如果您發現一個像素的值不同,它是一個包含顏色的圖像(至少在技術上 - 像RGB(100,102,103)這樣的顏色對人眼而言會呈灰色)。

+0

因此,遍歷每個像素並檢查每個與該功能? – Ash 2013-02-11 10:28:59

+0

@Ash - 喲。 ---- – 2013-02-11 10:29:11

+2

只要你找到一個使用Pekka方法的彩色像素,你就可以停下來。這會加快這個過程,因爲它可能是第一個像素!或者,您可以調整圖像大小或選擇一個區域進行檢查。 – Bonzo 2016-04-13 21:03:00

1

根據服務器上安裝的光柵圖像套件的不同,您可以使用這些工具獲得比Pekka在此提供的更簡單,更準確的答案。這是否更快是一個公開的論點(見下面的註釋)。

在ImageMagick的樣品(和鏈路)以下時,建議是:

將圖像轉換爲HSL,然後輸出詳細信息 ( 「識別」 統計)

析詳細的信息可以讓你回答你的問題;因此確切,簡單,並且不需要猜測「接近」的灰色圖像。它還提供了您可以使用的其他數據,具體取決於您的工作流程和需求。

來源:http://www.imagemagick.org/discourse-server/viewtopic.php?t=19580

我懷疑這是不是佩卡的解決方案更快,因爲轉換圖像將通過像素基本上是環反正。

所以,Pekka的速度答案。這個答案是精確的。