2011-10-11 17 views
25

PHPで画像の上位2色を検出するにはどうすればよいですか?PHPを使用して画像の色を検出する

enter image description here

この機能/プロセスが返されます:私はこのイメージを持っ例えば

0000FFまたはFFFF00またはYELLOW

おかげ

+2

これはあなたのために何かあるかもしれない:http://stackoverflow.com/questions/3468500/detect-overall-average-color-of-the-picture – samn

+0

おかげで、素晴らしいthatsの。あなたは答えとしてそれを置くことができますか? – Tech4Wilco

答えて

20

ここにscrそのIPTあなたのリストが表示されます:

function detectColors($image, $num, $level = 5) { 
    $level = (int)$level; 
    $palette = array(); 
    $size = getimagesize($image); 
    if(!$size) { 
    return FALSE; 
    } 
    switch($size['mime']) { 
    case 'image/jpeg': 
     $img = imagecreatefromjpeg($image); 
     break; 
    case 'image/png': 
     $img = imagecreatefrompng($image); 
     break; 
    case 'image/gif': 
     $img = imagecreatefromgif($image); 
     break; 
    default: 
     return FALSE; 
    } 
    if(!$img) { 
    return FALSE; 
    } 
    for($i = 0; $i < $size[0]; $i += $level) { 
    for($j = 0; $j < $size[1]; $j += $level) { 
     $thisColor = imagecolorat($img, $i, $j); 
     $rgb = imagecolorsforindex($img, $thisColor); 
     $color = sprintf('%02X%02X%02X', (round(round(($rgb['red']/0x33)) * 0x33)), round(round(($rgb['green']/0x33)) * 0x33), round(round(($rgb['blue']/0x33)) * 0x33)); 
     $palette[$color] = isset($palette[$color]) ? ++$palette[$color] : 1; 
    } 
    } 
    arsort($palette); 
    return array_slice(array_keys($palette), 0, $num); 
} 

$img = 'icon.png'; 
$palette = detectColors($img, 6, 1); 
echo '<img src="' . $img . '" />'; 
echo '<table>'; 
foreach($palette as $color) { 
    echo '<tr><td style="background:#' . $color . '; width:36px;"></td><td>#' . $color . '</td></tr>'; 
} 
echo '</table>'; 
+5

あなたは基本的に、私が言及したページのコードをコピーしました。道順... – samn

+3

と私は修正を加えましたが、あなたは正しいです – rcs20

+4

私はこれを '$ img = @imagecreatefromstring(file_get_contents($ image)); 'で置き換えることでこれを最適化します。効率的に... – Andres

0

あなたは、外部ユーティリティを呼び出すことがOKであれば、ImageMagickのはあなたのためのヒストグラムを生成することができます。 PHPの実装よりもはるかに高速になるでしょう。あなたが最初に固定されたパレットに画像をマッピングすることがあります

convert 'http://i.stack.imgur.com/J2txV.png' -format %c histogram:info:-|sort -r 

(色を「締めくくり」):

基本的には、このコマンドを使用すると、最初に最も支配的でソートされた色のリストを与えます。これは私が使用するものです。

convert 'http://i.stack.imgur.com/J2txV.png' -modulate 100,200,100 -remap 'http://i.stack.imgur.com/GvTqB.png' -format %c histogram:info:-|sort -r 
関連する問題